QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#310369 | #6399. Classic: Classical Problem | PlentyOfPenalty# | WA | 1ms | 3804kb | C++20 | 1.5kb | 2024-01-21 11:58:11 | 2024-01-21 11:58:12 |
Judging History
answer
#include<bits/stdc++.h>
#define all(x) begin(x),end(x)
#ifndef memset0
#define endl '\n'
#endif
using namespace std;
const int N=2e5+9;
int T,n,p,a[N],lg[N],ilg[N];
bitset<N> b,c,d;
pair<vector<int>,int> solve(){
b.reset();
bool fl=false;
for(int i=1;i<=n;i++){
if(a[i])b.set(lg[a[i]]);
else fl=true;
}
if(!fl){
return {{0},1};
}
c.reset();
for(int i=0;i<p-1;i++){
c.set(i);
}
for(int mex=1;;mex++){
int x=lg[mex];
d=c&((b<<x)|(b>>(p-1-x)));
// cerr<<"mex="<<mex<<" x="<<x<<endl;
// for(int i=0;i<p-1;i++)cerr<<c.test(i)<<" \n"[i+1==p-1];
// for(int i=0;i<p-1;i++)cerr<<d.test(i)<<" \n"[i+1==p-1];
if(d.count()==0){
vector<int> ans;
for(size_t i=c._Find_first();i!=c.size();i=c._Find_next(i)){
ans.push_back(ilg[i]);
}
return {ans,mex};
}else{
c=d;
}
}
return {{},-1};
}
int main(){
#ifdef memset0
freopen("F.in","r",stdin);
#endif
cin.tie(0)->sync_with_stdio(0);
cin>>T;
while(T--){
cin>>n>>p;
// cerr<<"n="<<n<<" p="<<p<<endl;
for(int i=1;i<=n;i++)cin>>a[i];
for(int g=1;g<=p;g++){
fill_n(lg,p+5,-1);
bool fl=true;
lg[1]=0;
for(int i=1,x=g;i<p-1;i++,x=(long long)x*g%p){
if(lg[x]!=-1){fl=false;break;}
lg[x]=i;
}
if(fl)break;
}
for(int i=1;i<p;i++)ilg[lg[i]]=i;
// cerr<<"LG: ";for(int i=0;i<p;i++)cerr<<lg[i]<<" \n"[i+1==p];
auto ans=solve();
cout<<ans.first.size()<<" "<<ans.second<<endl;
sort(all(ans.first));
for(int i=0;i<ans.first.size();i++)cout<<ans.first[i]<<" \n"[i+1==ans.first.size()];
}
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3796kb
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: 1ms
memory: 3804kb
input:
3 1 2 0 1 2 1 2 2 1 0
output:
1 1 1 1 1 0 1 2 1
result:
wrong answer 1st lines differ - expected: '2 1', found: '1 1'