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 _smiling at 2008-10-05 11:35:18 on Problem 1363
    先把每一个车厢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