QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#393983#2833. Hamiltonzyz07WA 0ms3604kbC++172.7kb2024-04-19 20:02:042024-04-19 20:02:05

Judging History

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

  • [2024-04-19 20:02:05]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3604kb
  • [2024-04-19 20:02:04]
  • 提交

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;
}

Details

Tip: Click on the bar to expand more detailed information

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