求助站外题
  • 板块学术版
  • 楼主AAA404
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/7/2 21:32
  • 上次更新2023/11/3 11:50:46
查看原帖
求助站外题
723198
AAA404楼主2023/7/2 21:32

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

2023/7/2 21:32
加载中...