Codeforces Global Round 1 E. Magic Stones(思維+構造+差分)

Codeforces Global Round 1

題意:給出長度爲n的數組c和長度爲n的數組t,已知對於數組c的每一項都可以使得c[i]=c[i+1]+c[i-1]−c[i],判斷是否可以使得c數組變爲t數組。

題解:c[i]-c[i-1]=c[i+1]-c[i] c[i+1]-c[i]=c[i]-c[i-1] 這個變換的意思其實是交換差分數組相鄰的兩項,所以寫出c和t的差分數組排序後判斷是否相同,且c1==t1即可。

#include<bits/stdc++.h>
using namespace std;
#define Sheryang main
const int maxn=5e5+7;
typedef long long ll;
const int mod=1e7+7;
#define IO cin.tie(0),ios::sync_with_stdio(false);
#define pi acos(-1)
#define PII pair<ll,ll>
ll read(){ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();if(c == '-')Nig = -1,c = getchar();while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();return Nig*x;}
#define read read()
/** keep hungry and keep calm! **/


int a[maxn],b[maxn];
int Sheryang()
{
    int n=read;
    for(int i=1;i<=n;i++){
        a[i]=read;
    }
    for(int i=1;i<=n;i++){
        b[i]=read;
    }

    vector<int>v1,v2;
    for(int i=2;i<=n;i++){
        v1.push_back(a[i]-a[i-1]);
        v2.push_back(b[i]-b[i-1]);
    }
    sort(v1.begin(),v1.end());
    sort(v2.begin(),v2.end());

    if(v1==v2 && a[1]==b[1]){
        printf("YES\n");
    }else{
        printf("No\n");
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章