| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我的想法有漏洞吗?先把每一个车厢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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator