QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#310369#6399. Classic: Classical ProblemPlentyOfPenalty#WA 1ms3804kbC++201.5kb2024-01-21 11:58:112024-01-21 11:58:12

Judging History

你现在查看的是最新测评结果

  • [2024-01-21 11:58:12]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3804kb
  • [2024-01-21 11:58:11]
  • 提交

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'