QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#372894 | #6399. Classic: Classical Problem | Yu_Xuaan | WA | 1ms | 3592kb | C++14 | 2.9kb | 2024-03-31 20:27:39 | 2024-03-31 20:27:40 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define ceil(x,y) ((x)+(y)-1)/(y)
#define all(x) (x).begin(),(x).end()
typedef long long ll;
const int N=2e5+5;
int exgcd(int a,int b,int &x,int &y)
{
if(b==0)
return x=1,y=0,a;
int res=exgcd(b,a%b,x,y),xx=x,yy=y;
return x=yy,y=xx-a/b*yy,res;
}
int ksm(int a,int b,int mod)
{
int res=1;
while(b)
{
if(b&1)res=1ll*res*a%mod;
a=1ll*a*a%mod,b>>=1;
}
return res;
}
inline int inv(int x,int mod){return ksm(x,mod-2,mod);}
void solve()
{
int n,p;
cin>>n>>p;
vector<int> a(n);
for(int i=0;i<n;i++)
cin>>a[i];
int ans=0;
vector<int> res;
for(int i=0;i<p;i++)
{
vector<int> vis(p+1);
for(int j=0;j<n;j++)
vis[(a[j]*i)%p]=1;
for(int j=0;j<=p;j++)
if(!vis[j])
{
if(j>=ans)
{
if(j==ans)res.push_back(i);
else res={i};
ans=j;
}
break;
}
}
cout<<ans<<'\n';
// cout<<res.size()<<' '<<ans<<'\n';
// for(auto x:res)
// cout<<x<<" \n"[x==res.back()];
}
void solve2()
{
int n,p,fl=0,ans=1;
cin>>n>>p;
vector<int> a(n),vis(p),res;
for(int i=0;i<n;i++)
{
cin>>a[i];
vis[a[i]]=1;
}
if(!vis[0])
{
cout<<"1 1\n";
cout<<"0\n";
return;
}
if(n==1||n==p)
{
cout<<p<<' '<<n<<'\n';
for(int i=0;i<p;i++)
cout<<i<<" \n"[i==p-1];
return;
}
if(p-n>=250)
{
// cerr<<"branch 1\n";
for(int i=0;i<n;i++)
{
if(!a[i])continue;
for(int cnt=0,j=a[i];;j+=a[i])
{
j%=p;
++cnt;
if(!vis[j])
{
if(cnt>=ans)
{
int c=inv(a[i],p);
if(cnt>ans)res={c};
else res.push_back(c);
ans=cnt;
}
break;
}
}
}
}
else//250*2e5=4e7
{
// cerr<<"branch 2\n";
vector<int> no;
for(int i=0;i<p;i++)
if(!vis[i])
no.push_back(i);
for(int i=0;i<n;i++)
{
if(!a[i])continue;
int minx=1e9;
for(auto x:no)
{
int k,tmp;
exgcd(a[i],p,k,tmp);
k=1ll*k*x%p;
if(k<0)k+=1ll*ceil(-k,p)*p;
k%=p;
minx=min(k,minx);
}
if(minx>=ans)
{
int c=inv(a[i],p);
if(minx>ans)res={c};
else res.push_back(c);
ans=minx;
}
}
}
cout<<res.size()<<' '<<ans<<'\n';
sort(all(res));
for(auto x:res)
cout<<x<<" \n"[x==res.back()];
}
signed main()
{
// freopen("1.in","r",stdin);
// freopen("std.out","w",stdout);
std::ios::sync_with_stdio(false);
std::cin.tie(0);std::cout.tie(0);
int T=1;
cin>>T;
while(T--)
solve2();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3592kb
input:
3 2 3 0 2 3 5 2 3 4 3 5 0 2 3
output:
1 2 2 1 1 0 2 2 2 3
result:
ok 6 lines
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3572kb
input:
3 1 2 0 1 2 1 2 2 1 0
output:
2 1 0 1 1 1 0 2 2 0 1
result:
wrong answer 5th lines differ - expected: '1 2', found: '2 2'