| ||||||||||
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 |
Re:我的想法有漏洞吗?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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator