Cod sursa(job #6887)

Utilizator vlad_DVlad Dumitriu vlad_D Data 21 ianuarie 2007 10:31:35
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.39 kb
#include <cstdio>

using namespace std;
int v[201][101];
int h[64], w[64];
int i, j;
int n;
void solve(int cmd, int a, int b) {
	if (w[a] == w[b]) return;
	switch (cmd){
	case 11: {
				int i, j, k;
				k = w[a];
				for (i=h[k]; v[k][i]!=a; i--){
					h[v[k][i]]++;
					v[v[k][i]][h[v[k][i]]] = v[k][i];
					w[v[k][i]] = v[k][i];
					v[k][i] = 0;
					h[k]--;	
				}
				k = w[b];
				for (i=h[k]; v[k][i]!=b; i--){
					h[v[k][i]]++;
					v[v[k][i]][h[v[k][i]]] = v[k][i];
					w[v[k][i]] = v[k][i];
					v[k][i] = 0;
					h[k]--;	
				}
            
			 h[w[a]]--; h[w[b]]++;
			 v[w[b]][h[w[b]]] = a;
			 w[a] = w[b];
			 break;
			 }
	case 12: {
				int i, j, k;
				k = w[a];
				for (i=h[k]; v[k][i]!=a; i--){
					h[v[k][i]]++;
					v[v[k][i]][h[v[k][i]]] = v[k][i];
					w[v[k][i]] = v[k][i];
					v[k][i] = 0;
					h[k]--;	
				}
			 h[w[a]]--; h[w[b]]++;
			 v[w[b]][h[w[b]]] = a;
			 w[a] = w[b];
			 break;
			 }
	case 21: {
			    int i, j, k;
				k = w[b];
				for (i=h[k]; v[k][i]!=b; i--){
					h[v[k][i]]++;
					v[v[k][i]][h[v[k][i]]] = v[k][i];
					w[v[k][i]] = v[k][i];
					v[k][i] = 0;
					h[k]--;	
				}
				int stack[32];
				stack[0] = 0;
				k = w[a];
				for (i=h[k]; v[k][i]!=a; i--){
					stack[++stack[0]] = v[k][i];
					w[v[k][i]] = w[b];
					v[k][i] = 0;
					h[k]--;
				}
				
				h[k]--;stack[++stack[0]] = a;
				k = w[b]; w[a] = w[b];
				for (i=stack[0]; i>=1; i--) v[k][++h[k]] = stack[i];
				break;
			 }
	case 22: {
			 int i, j, k;
				int stack[32];
				stack[0] = 0;
				k = w[a];
				for (i=h[k]; v[k][i]!=a; i--){
					stack[++stack[0]] = v[k][i];
					w[v[k][i]] = w[b];
					v[k][i] = 0;
					h[k]--;
				}
				
				h[k]--;stack[++stack[0]] = a;
				k = w[b]; w[a] = w[b];
				for (i=stack[0]; i>=1; i--) v[k][++h[k]] = stack[i];
				break;
			 }
	default: break;
	}
}
int main() {
	//freopen("date.in", "r", stdin);
	scanf("%d\n", &n);
	for (i=1; i<=n; i++) {v[i][1] = i; h[i] = 1, w[i] = i;}
	while(1) {
		char v[128];
		scanf("%s", &v);
		if (v[0] == 'q') break;
		int cmd = 0, a, b;
		if (v[0] == 'm') cmd+=10;
		else cmd+=20;
		scanf("%d %s %d\n", &a, &v, &b);
		a++, b++;
		if (v[1] == 'n') cmd+=1; else cmd+=2;
		solve(cmd, a, b);
	}
	for (i=1; i<=n; i++) {
		printf("%d:", i-1);
		for (j=1; j<=h[i]; j++) printf(" %d", v[i][j]-1);
		printf("\n");
	}
	return 0;
}