题目链接:
洛谷
Codeforces
Solution
以前做过这种题,比这题难得多,所以看到就秒了,加强版:[NOIP2021] 方差。
再来推一遍:
如果每次操作 \(a_i\),那么差分数组的变化为:
即交换差分数组 \(d_i\) 和 \(d_{i+1}\)。
所以就简单了,看两个数组的差分数组排序后是否相同。
注意 \(a_1\) 和 \(a_n\) 不能操作,所以如果这两个不对应相等,直接判不能。
Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
void read(int &x)
{
char ch=getchar();
int r=0,w=1;
while(!isdigit(ch))w=ch=='-'?-1:1,ch=getchar();
while(isdigit(ch))r=(r<<3)+(r<<1)+(ch^48),ch=getchar();
x=r*w;
}
const int N=1e6+7;
int a[N],b[N],d1[N],d2[N];
main()
{
int n;
read(n);
for(int i=1;i<=n;i++)read(a[i]),d1[i]=a[i]-a[i-1];
for(int i=1;i<=n;i++)read(b[i]),d2[i]=b[i]-b[i-1];
if(a[1]!=b[1]||a[n]!=b[n])
{puts("No");return 0;}
sort(d1+1,d1+n+1);
sort(d2+1,d2+n+1);
for(int i=1;i<=n;i++)
if(d1[i]!=d2[i]){puts("No");return 0;}
puts("Yes");
return 0;
}
标签:Stones,ch,Magic,int,差分,数组,isdigit,CF1110E,getchar
From: https://www.cnblogs.com/LAK666/p/16592777.html