题意:给出一串序列(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 105
bool 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;
}