CodeForces - 1110E-Magic Stones(差分+思维)
Grigory has?nn?magic stones, conveniently numbered from?11?to?nn. The?charge?of the?ii-th stone is equal to?cici.
Sometimes Grigory gets bored and selects some?inner?stone (that is, some stone with index?ii, where?2≤i≤n?12≤i≤n?1), and after that?synchronizes?it with neighboring stones. After that, the chosen stone loses its own charge, but acquires the charges from neighboring stones. In other words, its charge?cici?changes to?c′i=ci+1+ci?1?cici′=ci+1+ci?1?ci.
Andrew, Grigory's friend, also has?nn?stones with charges?titi. Grigory is curious, whether there exists a sequence of zero or more?synchronization?operations, which transforms charges of Grigory's stones into charges of corresponding Andrew's stones, that is, changes?cici?into?titi?for all?ii?
Input
The first line contains one integer?nn?(2≤n≤1052≤n≤105)?— the number of magic stones.
The second line contains integers?c1,c2,…,cnc1,c2,…,cn?(0≤ci≤2?1090≤ci≤2?109)?— the charges of Grigory's stones.
The second line contains integers?t1,t2,…,tnt1,t2,…,tn?(0≤ti≤2?1090≤ti≤2?109)?— the charges of Andrew's stones.
Output
If there exists a (possibly empty) sequence of?synchronization?operations, which changes all charges to the required ones, print "Yes".
Otherwise, print "No".
Examples
Input
4 7 2 4 12 7 15 10 12Output
YesInput
3 4 4 4 1 2 3Output
NoNote
In the first example, we can perform the following?synchronizations?(11-indexed):
- First,?synchronize?the third stone?[7,2,4,12]→[7,2,10,12][7,2,4,12]→[7,2,10,12].
- Then?synchronize?the second stone:?[7,2,10,12]→[7,15,10,12][7,2,10,12]→[7,15,10,12].
In the second example, any operation with the second stone will not change its charge.
代碼:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> #include<stack> #include<vector>using namespace std;int a[100005],b[100005],c[100005],d[100005]; int main() {int n;cin>>n;int flag=0;for(int t=1;t<=n;t++){scanf("%d",&a[t]);}for(int t=1;t<=n;t++){scanf("%d",&b[t]);}for(int t=1;t<=n-1;t++){c[t]=a[t+1]-a[t];}for(int t=1;t<=n-1;t++){d[t]=b[t+1]-b[t];}if(a[1]!=a[1]||a[n]!=b[n]){flag=1;}sort(c+1,c+n);sort(d+1,d+n);for(int t=1;t<=n;t++){if(c[t]!=d[t]){flag=1;}}if(!flag){puts("Yes");}else{puts("No");}return 0; }?
轉載于:https://www.cnblogs.com/Staceyacm/p/10781806.html
總結
以上是生活随笔為你收集整理的CodeForces - 1110E-Magic Stones(差分+思维)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 面向对象初识
- 下一篇: 【学习笔记】【Design idea】一
