QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#874788#8592. Toxic Gene 2make_zlc_great_again0 1ms3968kbC++143.1kb2025-01-28 16:15:282025-01-28 16:15:28

Judging History

This is the latest submission verdict.

  • [2025-01-28 16:15:28]
  • Judged
  • Verdict: 0
  • Time: 1ms
  • Memory: 3968kb
  • [2025-01-28 16:15:28]
  • Submitted

answer

#include "toxic.h"
#include<iostream>
#include<algorithm>
#include<cassert>
using namespace std;
int fa[1005];
int find(int x){
	return fa[x]==x?x:fa[x]=find(fa[x]);
}
vector<int> query(vector<int> s){
	vector<int>res,qs;
	for(int i=0;i<s.size();++i){
		qs.push_back(s[i]-1);
	}
	res=query_machine(qs);
	if(res.back()==s.size()){
		for(int i:s) fa[i]=find(s.back());
	}
	return res;
}
int get(int n){
	vector<int>uq;
	for(int i=1;i<=501;++i) uq.push_back(1);
	for(int i=2;i<=(n>>1);++i) uq.push_back(i);
	vector<int>v=query(uq);
	if(v.back()==uq.size()){
		vector<int>tmp=query({1,1,n});
		if(tmp.back()==2) return 1;
		else if(tmp.back()==1) return n;
		else{
			uq.clear();
			for(int i=1;i<=501;++i) uq.push_back(1);
			for(int i=1+(n>>1);i<=n;++i) uq.push_back(i);
			v=query(uq);
			assert(v.back()!=uq.size());
			assert(v.size()>500);
			return (v.back()>500?1:v.size()-501+1+(n>>1));
		}
	}
	else return (v.back()>500?1:v.size()-501+2);
}
void determine_type(int n){
	for(int i=1;i<=n;++i) fa[i]=i;
	vector<pair<int,int> > V;
	for(int i=1;i<=100;++i) V.push_back({0,i});
	for(int i=1;i<=10;++i){
		for(int j=2;j<=100;j+=2){
			V.push_back({i,j});
		}
	}
	sort(V.begin(),V.end(),[&](pair<int,int> x,pair<int,int> y){
		return (1<<x.first)*(x.second+1)<(1<<y.first)*(y.second+1);
	});
	int c=0;
	vector<pair<int,int> >us;
	for(int i=0;i<48;++i){
		c+=(1<<V[i].first)*(V[i].second+1);
		if(c<=999){
			us.push_back(V[i]);
		}
		else break ;
	}
	sort(us.begin(),us.end(),[&](pair<int,int> x,pair<int,int>y){
		if(x.second%2==0&&y.second%2==1) return false;
		if(x.second%2==1&&y.second%2==0) return true;
		return x.second<y.second;
	});
	int p=get(n);
	vector<char>ans;
	ans.assign(n,'N');
	ans[p-1]='T';
	while(1){
		bool f=0;
		for(int i=0;i<n;++i) if(ans[find(i+1)]=='N') f=1;
		if(!f) break ;
		vector<int>A;
		for(int i=1;i<=n;++i) if(find(i)==i&&ans[i-1]=='N'){
			A.push_back(i);
			if(A.size()>=50) break ;
		}
		while(A.size()<50) A.push_back(A.back());
		vector<int>uq;
		uq.push_back(p);
		for(int i=1;i<=25;++i) uq.push_back(A[48]);
		for(int o=0;o<us.size();++o){
			auto i=us[o];
			for(int j=1;j<=(1<<i.first);++j){
				uq.push_back(p);
				for(int k=1;k<=i.second;++k) uq.push_back(A[o]);
			}
		}
		uq.push_back(p);
		for(int i=1;i<=26;++i) uq.push_back(A[49]);
		uq.push_back(p);
		vector<int>v=query(uq);
		vector<int>d;
		int lst=uq.size();
		for(int i=0;i<v.size();++i) d.push_back(v[i]-lst),lst=v[i];
		while(d.size()<1000) d.push_back(0);
		for(int o=0;o<us.size();++o){
			auto i=us[o];
			if(i.second&1){
				if(d[(i.second-1)>>1]&1){
					ans[A[o]-1]='R';
					for(int j=0;j<(i.second-1)>>1;++j) d[j]-=2;
					d[(i.second-1)>>1]--;
				}
				else ans[A[o]-1]='T';
			}
		}
		for(int i:d) assert(i%2==0);
		for(int o=0;o<us.size();++o){
			auto i=us[o];
			if(i.second&1){
				continue ;
			}
			if(d[(i.second>>1)-1]>>(i.first+1)&1){
				ans[A[o]-1]='R';
				for(int j=0;j<=(i.second>>1)-1;++j) d[j]-=(1<<i.first+1);
			}
			else ans[A[o]-1]='T';
		}
	}
	for(int i=0;i<n;++i) if(ans[i]=='N') ans[i]=ans[find(i+1)-1];
	answer_type(ans);
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3840kb

input:

2 1000
TTTRTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTRTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTRTTTTTTTTRTTTTTTTTTTTTTTTTTTTTRTTRTTTTTTTTTTTTRTTTTRTTTTTTTTTTTTTTTTTRTTTTRTTTTTTTTTTTTTTTTTTTTTTTTRTTTTTTTTTTTTTTTTTTTTTTT...

result:

wrong answer Incorrect value returned

Subtask #2:

score: 0
Wrong Answer

Test #30:

score: 0
Wrong Answer
time: 1ms
memory: 3968kb

input:

2 1000
RRTTRRRRRTTRTTRRTTTTTTTTTTTTTRTTRRRRTTRRTTRTRRTRTRTTTTTRTRTTTTTTRRTTTRTTRTTTTRTTRTTRTTRTTRTRRRTRTTTTTRRTTTTTTRRRTRRTRRRRRTTTTTTTTTRTTRTRRTTTRRRTRRRTRTRTTRTTTRTRTRTRTTTRRTTTTTTTRTRRTRTTRTTTTTRTTRTTTRRTRTRTTRTRTRTTTTRTTTTTRTTTTTRRRTRTRRTRRTTTTTRTTTRTRTTTRTRTRRTRTTTRRTRRTTTRTRTTRRTTRTTTRRTTTRRRR...

result:

wrong answer Incorrect value returned