Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Posted by KatrineYang at 2016-08-18 05:03:43 on Problem 1208
#include <iostream>
#include <string>
using namespace std;

int getMv(string s1, string s2){
	if(s1 == "move"){
		if(s2 == "onto") return 0;
		return 1;
	}
	if(s2 == "onto") return 2;
	return 3;
}

int main() {
	int N;
	cin >> N;
	int stk[25][25];
	int gs[25];
	int blk[25];
	int h[25];
	for(int i = 0; i < N; i++) gs[i] = 1;
	for(int i = 0; i < N; i++) stk[i][0] = i;
	for(int i = 0; i < N; i++) blk[i] = i;
	for(int i = 0; i < N; i++) h[i] = 0;
	while(1){
		string s1, s2;
		int from, to;
		cin >> s1;
		if(s1 == "quit") {
			for(int i = 0; i < N; i++){
				cout << i << ":";
				for(int j = 0; j < gs[i]; j++){
					cout << " " << stk[i][j];
				}
				cout << endl;
			}
			return 0;
		}
		cin >> from >> s2 >> to;
		int mv = getMv(s1, s2);
		int b1 = blk[from], b2 = blk[to];
		int h1 = h[from], h2 = h[to];
		if(b1 == b2) continue;
		switch(mv){
			case 0:{
				for(int i = h1+1; i < gs[b1]; i++){
					int tar = stk[b1][i];
					blk[tar] = tar;
					h[tar] = 0;
					stk[tar][0] = tar;
					gs[tar] = 1;
				}
				for(int i = h2+1; i < gs[b2]; i++){
					int tar = stk[b2][i];
					blk[tar] = tar;
					h[tar] = 0;
					stk[tar][0] = tar;
					gs[tar] = 1;
				}
				blk[from] = b2;
				h[from] = h2+1;
				stk[b2][h2+1] = from;
				gs[b1] = h1;
				gs[b2] = h2+2;
				break;
			}
			case 1:{
				for(int i = h1+1; i < gs[b1]; i++){
					int tar = stk[b1][i];
					blk[tar] = tar;
					h[tar] = 0;
					stk[tar][0] = tar;
					gs[tar] = 1;
				}
				blk[from] = b2;
				h[from] = gs[b2];
				stk[b2][gs[b2]] = from;
				gs[b2]++;
				gs[b1] = h1;
				break;
			}
			case 2:{
				for(int i = h2+1; i < gs[b2]; i++){
					int tar = stk[b2][i];
					blk[tar] = tar;
					h[tar] = 0;
					stk[tar][0] = tar;
					gs[tar] = 1;
				}
				for(int i = h1; i < gs[b1]; i++){
					int tar = stk[b1][i];
					blk[tar] = b2;
					h[tar] = i-h1+h2+1;
					stk[b2][h[tar]] = tar;
				}
				gs[b2] = h2+1;
				gs[b2] += gs[b1]-h1;
				gs[b1] = h1;
				break;
			}
			case 3:{
				for(int i = h1; i < gs[b1]; i++){
					int tar = stk[b1][i];
					blk[tar] = b2;
					h[tar] = i-h1+gs[b2];
					stk[b2][h[tar]] = tar;
				}
				gs[b2] += gs[b1]-h1;
				gs[b1] = h1;
				break;
			}
		}
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator