QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#393983 | #2833. Hamilton | zyz07 | WA | 0ms | 3604kb | C++17 | 2.7kb | 2024-04-19 20:02:04 | 2024-04-19 20:02:05 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define For(Ti,Ta,Tb) for(auto Ti=(Ta);Ti<=(Tb);++Ti)
#define Dec(Ti,Ta,Tb) for(auto Ti=(Ta);Ti>=(Tb);--Ti)
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define range(Tx) begin(Tx),end(Tx)
using ll=long long;
const int N=2005;
int n;
char col[N][N];
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
while(cin>>n){
For(i,1,n){
string s;
cin>>s;
For(j,1,i-1){
col[i][j]=col[j][i]="RB"[s[j-1]-'0'];
}
}
if(n<=2){
For(i,1,n){
cout<<n<<'\n';
cout<<i<<' ';
For(j,1,n){
if(j!=i){
cout<<j<<' ';
}
}
cout<<'\n';
}
return 0;
}
For(i,1,n){
deque<int> red,blue;
vector<int> poi;
For(j,1,n){
if(j!=i){
poi.push_back(j);
}
}
switch((col[i][poi[1]]=='R')*2+(col[poi[0]][poi[1]]=='R')){
case 3:{
red={i,poi[1],poi[0]};
break;
}
case 2:{
red={i,poi[1]};
blue={poi[0]};
break;
}
case 1:{
red={poi[0],poi[1]};
blue={i};
break;
}
default:{
red={i};
blue={poi[1],poi[0]};
}
}
For(j,2,n-2){
int u=poi[j];
if(red.size()==1){
if(red[0]!=i){
if(col[u][red[0]]=='R'){
red.push_front(u);
}else{
blue.push_front(red[0]);
red.back()=u;
}
}else{
if(col[u][blue.back()]=='B'){
blue.push_back(u);
}else{
blue.push_front(red[0]);
red={u,blue.back()};
blue.pop_back();
reverse(range(blue));
}
}
}else if(!blue.size()){
if(col[u][red.back()]=='R'){
red.push_back(u);
}else{
blue.push_back(u);
}
}else{
int u1=red.end()[-2],u2=red.back(),u3=blue[0];
switch((col[u][u1]=='R')*2+(col[u][u2]=='R')){
case 3:{
red.back()=u;
red.push_back(u2);
break;
}
case 2:{
red.back()=u;
blue.push_front(u2);
break;
}
case 1:{
if(col[u][u3]=='R'){
blue.pop_front();
red.push_back(u);
red.push_back(u3);
}else{
red.push_back(u);
}
break;
}
default:{
red.pop_back();
blue.push_front(u2);
blue.push_front(u);
}
}
}
if(red[0]!=i&&(!blue.size()||blue.back()!=i)){
assert(red.back()==i&&!blue.size());
reverse(range(red));
}
}
if(red[0]==i){
for(int u:red) cout<<u<<' ';
for(int u:blue) cout<<u<<' ';
}else{
reverse(range(blue));
reverse(range(red));
for(int u:blue) cout<<u<<' ';
for(int u:red) cout<<u<<' ';
}
cout<<'\n';
break;
}
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3556kb
input:
3 001 000 100 4 0000 0000 0000 0000
output:
1 3 2 1 3 2 4
result:
ok 2 cases.
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3604kb
input:
3 000 000 000 3 010 100 000 3 011 100 100 3 011 101 110
output:
1 3 2 1 3 2 1 3 2 1 3 2
result:
wrong answer case #3: found 2 indices