【Educational Codeforces Round 37 C】 Swap Adjacent Elements

【链接】 我是链接,点我呀:)
【题意】

在这里输入题意

【题解】

显然l..r这一段连续的1可以把l..r+1变成有序的。
那么就把所有的连续1段变成有序的就好。
看看最后是不是升序即可。

【代码】

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5;

int n,a[N+10],b[N+10];
char s[N+10];

int main(){
    #ifdef LOCAL_DEFINE
        freopen("rush_in.txt", "r", stdin);
    #endif
    ios::sync_with_stdio(0),cin.tie(0);
    cin >> n;
    for (int i = 1;i <= n;i++) cin >> a[i];
    cin >>(s+1);
    for (int i = 1;i <= n-1;i++)
        if (s[i]=='1'){
            int j = i;
            while (j+1<=n-1 && s[j+1]==s[i]) j++;
            sort(a+i,a+1+j+1);
            i = j;
        }
    for (int i = 1;i <= n;i++)
        if (a[i]!=i)
            return cout<<"NO"<<endl,0;
    cout<<"YES"<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/AWCXV/p/8408748.html

时间: 2024-11-09 11:43:24

【Educational Codeforces Round 37 C】 Swap Adjacent Elements的相关文章

【Educational Codeforces Round 37 E】Connected Components?

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] bfs. 用一个链表来记录哪些点已经确定在某一个联通快里了. 一开始每个点都能用. 然后从第一个点开始进行bfs. 然后对于它的所有连接着的点(输入的图的补图 看看它是不是之前进行过bfs,如果是的话.就跳过.(可以用链表直接跳过.即沿着链表枚举它的出度. 否则.把这个点从链表中删掉.然后把这个点加入队列.继续bfs即可. 这样已经确定联通了的点之间不会再访问. 链表加速了寻找某个点的出度的过程. 且由于当n很大的时候.m只有2

【Educational Codeforces Round 37 A】 Water The Garden

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 记录下水龙头在哪些位置. 然后每秒钟把index-i和index+i改变状态一下就好(置1 [代码] #include <bits/stdc++.h> using namespace std; const int N = 200; int n,k; int a[N+10],x[N+10]; int ok(){ for (int i = 1;i <= n;i++) if (a[i]==0) return 0; return

【Educational Codeforces Round 37】F. SUM and REPLACE 线段树+线性筛

题意 给定序列$a_n$,每次将$[L,R]$区间内的数$a_i$替换为$d(a_i)$,或者询问区间和 这题和区间开方有相同的操作 对于$a_i \in (1,10^6)$,$10$次$d(a_i)$以内肯定可以最终化为$1$或者$2$,所以线段树记录区间最大值和区间和,$Max\le2$就返回,单点暴力更新,最后线性筛预处理出$d$ 时间复杂度$O(m\log n)$ 代码 #include <bits/stdc++.h> using namespace std; typedef long

【Educational Codeforces Round 35 A】 Nearest Minimums

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 找出最小的数字的位置. 最近的肯定是相邻的某对. [代码] #include <bits/stdc++.h> using namespace std; const int N = 1e5; int n; int a[N+10],mi; int main(){ #ifdef LOCAL_DEFINE freopen("rush_in.txt", "r", stdin); #endif io

【Educational Codeforces Round 35 D】Inversion Counting

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排列中交换任意两个数字. 排列的逆序对个数的奇偶性会发生变化. 翻转这个过程其实就是len/2对数字发生交换. 交换了偶数次的话,不变,否则奇偶性发生改变. 先暴力求出一开始的逆序对个数就好 [代码] #include <bits/stdc++.h> using namespace std; const int N = 1500; int n,a[N+10],cnt,now,m; void out(int x){ if (x=

【Educational Codeforces Round 35 C】Two Cakes

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 直觉题. 感觉情况会很少. 毕竟间隔太大了.中间肯定有一些数字达不到. 有1肯定可以 2 2 x肯定可以 3 3 3也可以 2 4 4也可以. 就这样 [代码] #include <bits/stdc++.h> using namespace std; vector <int> v; int main(){ #ifdef LOCAL_DEFINE freopen("rush_in.txt", &

【Educational Codeforces Round 36 A】 Garden

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举用哪一个桶就好 [代码] #include <bits/stdc++.h> using namespace std; int n,k,x; int main(){ #ifdef LOCAL_DEFINE freopen("rush_in.txt", "r", stdin); #endif ios::sync_with_stdio(0),cin.tie(0); cin >>

Educational Codeforces Round 37

Educational Codeforces Round 37 题面 题目详见CodeForces 先大概的写个翻译... A 有一个长度为\(n\)的花园 有\(K\)个水龙头, 假设水龙头的位置在\(x\) \(1s\)后\(x\)会被灌溉 \(2s\)后\([x-1,x+1]\)会被灌溉 \(js\)后\([x-j+1,x+j-1]\)会被灌溉 问这个花园在什么时候会被灌溉完 B 阅读理解题,我英语不好呀... 有\(n\)个人要去喝茶 每个人有一个\(l,r\) 表示这个人会在第\(ls

Educational Codeforces Round 37 (Rated for Div. 2)A,B,C,F

A Water The Garden 数据不大,暴力模拟下直至把每个花床都遍历过的过程即可 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define PI acos(-1.0) 5 #define INF 1e18 6 #define inf 0x3f3f3f3f 7 #define FAST_IO ios::sync_with_stdio(false) 8 9 const int N=456; 10 typedef long