【BZOJ5071】[Lydsy十月月賽]小A的數字 發現性質
阿新 • • 發佈:2017-10-29
stream bzoj type 交換 數字 void family 直接 題解
【BZOJ5071】[Lydsy十月月賽]小A的數字
題解:一般遇到這種奇奇怪怪的操作,常用的套路是將原序列差分一下,或者求個前綴和什麽的。本題就是直接對原序列求前綴和,然後發現一次操作相當於交換兩個相鄰位置,所以將a數組和b數組求完前綴和排個序看一下每位是否都相同即可。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; const int maxn=100010; ll a[maxn],b[maxn]; int n,T; inline int rd() { int ret=0,f=1; char gc=getchar(); while(gc<‘0‘||gc>‘9‘) {if(gc==‘-‘) f=-f; gc=getchar();} while(gc>=‘0‘&&gc<=‘9‘) ret=ret*10+gc-‘0‘,gc=getchar(); return ret*f; } void work() { int i; n=rd(); for(i=1;i<=n;i++) a[i]=a[i-1]+rd(); for(i=1;i<=n;i++) b[i]=b[i-1]+rd(); sort(a+1,a+n+1),sort(b+1,b+n+1); for(i=1;i<=n;i++) { if(a[i]!=b[i]) { printf("NO\n"); return ; } } printf("YES\n"); } int main() { T=rd(); while(T--) work(); return 0; }
【BZOJ5071】[Lydsy十月月賽]小A的數字 發現性質