QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#874793#8592. Toxic Gene 2make_zlc_great_again0 0ms0kbC++143.6kb2025-01-28 16:25:482025-01-28 16:25:49

Judging History

This is the latest submission verdict.

  • [2025-01-28 16:25:49]
  • Judged
  • Verdict: 0
  • Time: 0ms
  • Memory: 0kb
  • [2025-01-28 16:25:48]
  • 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);
	// cerr<<"p:"<<p<<"\n";
	vector<char>ans;
	ans.assign(n,'N');
	ans[p-1]='T';
	// for(int i=1;i<=n;++i) printf("%d ",fa[i]);printf("\n");
	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;
		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]);
		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);
		if(v.size()<=24){
			ans[A[48]-1]=ans[A[49]-1]='T';
		}
		else {
			if(v.size()==26){
				ans[A[49]-1]='R';
				for(int i=0;i<26;++i) d[i]--;
				if(d[25]==0) ans[A[48]-1]='T';
				else {
					ans[A[48]-1]='R';
					for(int i=0;i<25;++i) d[i]--;
				}
			}
			else {
				ans[A[48]-1]='R';
				for(int i=0;i<25;++i) d[i]--;
			}
		}
		for(int o=0;o<us.size();++o){
			auto i=us[o];
			if(i.second&1){
				// printf("o:%d,i.se:%d,%d\n",o,i.second,A[o]);
				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);
}

詳細信息

Subtask #1:

score: 0
Runtime Error

Test #1:

score: 0
Runtime Error

input:

2 1000
TTTRTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTRTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTRTTTTTTTTRTTTTTTTTTTTTTTTTTTTTRTTRTTTTTTTTTTTTRTTTTRTTTTTTTTTTTTTTTTTRTTTTRTTTTTTTTTTTTTTTTTTTTTTTTRTTTTTTTTTTTTTTTTTTTTTTT...

result:


Subtask #2:

score: 0
Runtime Error

Test #30:

score: 0
Runtime Error

input:

2 1000
RRTTRRRRRTTRTTRRTTTTTTTTTTTTTRTTRRRRTTRRTTRTRRTRTRTTTTTRTRTTTTTTRRTTTRTTRTTTTRTTRTTRTTRTTRTRRRTRTTTTTRRTTTTTTRRRTRRTRRRRRTTTTTTTTTRTTRTRRTTTRRRTRRRTRTRTTRTTTRTRTRTRTTTRRTTTTTTTRTRRTRTTRTTTTTRTTRTTTRRTRTRTTRTRTRTTTTRTTTTTRTTTTTRRRTRTRRTRRTTTTTRTTTRTRTTTRTRTRRTRTTTRRTRRTTTRTRTTRRTTRTTTRRTTTRRRR...

result: