题意:
给你n个从1到n不重复的数字。
通过一串01字符串告诉你任意临近的两个位置的数字能否交换。
问你能不能满足要求把这一组数字通过相邻两个数字交换的方法排成升序
能的话输出YES否则输出NO
代码即思路。
AC代码 :
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int MAXN=2e5+10; int main() { int n,flag=1; int a[MAXN],b[MAXN]; char str[MAXN]; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); scanf("%s",str); b[0]=0; for(int i=0;i<n-1;i++) { b[i+1]= str[i]==‘1‘ ? b[i]+1 : b[i]; } for(int i=0;i<n;i++) if(a[i]!=i+1) { if(abs(a[i]-(i+1))!=abs(b[a[i]-1]-b[i])) { flag=0; break; } } if(flag) printf("YES\n"); else printf("NO\n"); return 0; }