rt,被卡的一塌糊涂,一开始MLE,后面RE+MLE+WA,在后面RE,到现在WA2点
一本通上的题,题号1463
#include<bits/stdc++.h>
#define itn int
#define tin int
#define nit int
#define tni int
#define nti int
#define scnaf scanf
#define ptrinf printf
#define icn cin
#define cni cin
#define inc cin
#define nci cin
#define nic cin
#define cuot cout
#define ocut cout
#define fro for
#define ull unsigned long long
using namespace std;
int A,B,C;
const int N=2e6+5;
int t[N];
vector<int>v;
bool bo[N];
inline int getid(int x)
{
return lower_bound(v.begin(),v.end(),x)-v.begin()+1;
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>A>>B>>C;
ull la=1;
for(int i=1;i<=N;i++)
{
la=(A*la+la%B)%C;
v.push_back(la);
t[i]=la;
}
v.erase(unique(v.begin(),v.end()),v.end());
sort(v.begin(),v.end());
for(int i=1;i<=N;i++)
{
int id=getid(t[i]);
if(bo[id])
{
cout<<i;
return 0;
}
else bo[id]=1;
}
cout<<"-1";
return 0;
}
思路是算出2e6个值,离散化(因为值域是1e9太大了桶开不下),然后遍历每一个数判断是否出现,整个循环做完就是2e6内没答案输出-1