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

Re:我的想法有漏洞吗?

Posted by _smiling at 2008-10-05 12:01:54 on Problem 1363
In Reply To:我的想法有漏洞吗? Posted by:_smiling at 2008-10-05 11:35:18
>     先把每一个车厢i的直接后继初始化为车厢i-1;然后随着输入动态改变车厢i的后继,
>     1.既如果当前输入的车厢号i比前一个输入的车厢号大的话,就改变以当前车厢号为后继的车厢,也就是把车厢号为i+1的车厢的后继由原来的i改变为i-1,如果i-1在前面出现过,就选i-2...,直到i-n,它会在后面出现;  
>     2.如果当前输入的车厢号i比前一个输入的车厢号小的话,如果它不是前一个车厢号的后继,就表示这顺序不对,就要输出‘No’;否则继续;
> #include <iostream>
> using namespace std;
> 
> int train[1005];//输入的车厢号
> bool ok;
> int behind[1005];//后继
> int used[1005];//是否已用过
> 
> int main()
> {
> 	int n;
> 	while (scanf("%d", &n), n) {
> 		while (1) {
> 			
> 			scanf("%d", &train[1]);
> 			if (train[1] == 0)
> 				break;
> 			int i;
> 			ok = 1;
> 			for (i = 1; i <= n; ++i) {
> 				behind[i] = i-1;
> 				used[i] = 0;
> 			}
> 			behind[train[1] + 1] = train[1] - 1;
> 			used[train[1]] = 1;
> 			for (i = 2; i <= n; ++i) {
> 				scanf("%d", &train[i]);
> 				if (ok) {
> 					if (train[i] > train[i-1]) {
> 						while (used[train[i]-1])		//确定的改变后继
> 							--train[i];
> 						behind[train[i] + 1] = train[i] - 1;
> 						continue;
> 					}
> 					else {
> 						if (train[i] != behind[train[i-1]])//
> 							ok = 0;
> 					}
> 					used[train[i]] = 1;
> 				}
> 			}
> 			if (ok)
> 				printf("Yes\n");
> 			else
> 				printf("No\n");
> 		}
> 		printf("\n");
> 	}
> 	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