CodeForces Educational #24 D Solution

来源:互联网 发布:vevo lazr软件下载 编辑:程序博客网 时间:2024/06/05 05:01

题意:给出一串序列(1e5个),每个数字介于1-1e6之间,给定一个A,要求:找到一个B,使得对于每个位置i:B的累计出现次数严格大于A的累计出现次数

题解:这个题属于预处理技巧。每次读入一个data,如果cnt[data]合法,即cnt[data]>cnt[A],那么把cnt继续++,否则,cnt[data]停止更新。然后读入所有数据之后,遍历寻找cnt比cnt[A]大的,就是答案。

Code:

#include<bits/stdc++.h>using namespace std;#define MAXN 105bool use [MAXN];int ans [MAXN];int m,n;int main(){    int now;    cin>>n>>m;    cin>>now;    for (int i=1;i<m;i++){        int temp;        cin>>temp;        int a = temp - now;        if (a<=0){            a+=n;        }        if (ans[now]==0&&use[a]||ans[now]!=0&&ans[now]!=a){            cout<<"-1"<<endl;            return 0;        }        use[a]=true;        ans[now]=a;        now= temp;    }    int as=1;    for (int i=1;i<=n;i++){        if(ans[i]==0){            while(use[as])as++;            cout<<as<<" ";            as++;        }else            cout<<ans[i]<<" ";    }    return 0;}


原创粉丝点击