| ||||||||||
| 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