QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#874788 | #8592. Toxic Gene 2 | make_zlc_great_again | 0 | 1ms | 3968kb | C++14 | 3.1kb | 2025-01-28 16:15:28 | 2025-01-28 16:15:28 |
Judging History
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);
}
詳細信息
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