测评机: Xeost[5]
得分: 80分
提交日期: 2010-8-25 23:32:00
有效耗时: 391毫秒
测试结果1: 通过本测试点|有效耗时62ms
测试结果2: 通过本测试点|有效耗时47ms
测试结果3: 答案错误|Special Judge:选手输出格式错误,或数字数目与标准输出不符。
测试结果4: 通过本测试点|有效耗时47ms
测试结果5: 答案错误|Special Judge:选手输出格式错误,或数字数目与标准输出不符。
测试结果6: 通过本测试点|有效耗时47ms
测试结果7: 通过本测试点|有效耗时47ms
测试结果8: 通过本测试点|有效耗时47ms
测试结果9: 通过本测试点|有效耗时47ms
测试结果10: 通过本测试点|有效耗时47ms
题目描述
题目背景
话说仙剑奇侠传四故事发生之时,勇气亲眼目睹琼华陨落,又见天河射下琼华,化去天火。着实为之感动。他自叹不如,因而决定归隐园田。
不过他在人间人生地不熟,为了找到一个落脚之地,他找到了同为仙兽的王蓬絮和花楹,两位MM在仔细的讨论商议之后决定——带勇气去蜀山!
经过一番周折,勇气终于在蜀山安家落户,住在原先独孤宇云的房间里(他已经当掌门去了),每天同其他弟子一同修道。
大约 10 年过后,仙盟开始举办一年一度的仙迷聚会,当然要邀请一些仙剑中的著名人物登场,这次就邀请了这三位仙兽。但不想,麻烦就因此开始……
题目叙述
仙盟的邀请函上的地址只写到北京某某某地,蓬絮和花楹哪里知道是什么地方?她们找来了勇气,勇气发觉他三百年之前去过那里,但是因为过了太久,已经记不清楚了。但是两位MM仙兽当然不肯放过这一展露头角的机会,在她们的死磨烂缠之后,勇气终于决定要想办法记起之前这一段回忆。
他把思绪整理了一下,发现过去那一段回忆是有很多情节交织在一起。他把所有的记忆划分成 n 个片断,他把去北京的记忆编号为 1,其他按照 2-n 的顺序依次编号。他发现,很多记忆的回忆之间是存在一先后关系的,比如说,你在回忆使用法术之前必须先回忆清楚什么东西叫法术。当然,同一样片断只需要回忆一次就可以了,比如看书和写字都要求识字,但想要看书和写字只需要回忆一次识字的知识就行了。
于是他把所有的这些关系写成了一张表,现在,他需要找出一种合适的方案来回忆起去北京的过去。你可以帮帮他吗?
数据范围
对于全部的数据,n <= 10。
输入格式
第一行一个数 n,表示有 n 个记忆片断,其中第一段为去北京的记忆。
第二行至第 n + 1 行,表示这 n 个片断的先后次序的表。第 i + 1 行的第一个数字为 c[i],表示在片断 i 被回忆之前必须要回忆过 c[i] 个片断,后面依次列出这 c[i] 个片断的编号,每两个数字间由一个空格隔开。
文件中出现的数字均为正整数,且没有多余的空行和空格。
输出格式
一行,依次输出回忆的顺序,两个数之间由一个空格隔开。行首和行尾不要有多余的空格。如果有多种可能的方案,任意输出一种即可。
如果不存在任何方案,输出“What a poor boy!”。
#include <iostream>
using namespace std;
int n,t[20],b[20],a[20][20],f[20],c=1,x=0;
int main()
{
memset(b,0,sizeof(b));
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>t[i];
for(int j=1;j<=t[i];j++)
cin>>a[i][j];
}
while(true)
{
if(x>20) {cout<<"What a poor boy!";return 0;}
if(c==n+1) break;
for(int i=1;i<=n;i++)
{
if(t[i]==0&&b[i]==0)
{
b[i]=1;
f[c++]=i;
for(int j=1;j<=n;j++)
for(int k=1;k<=t[j];k++)
if(a[j][k]==i)
{
for(int l=k;l<t[j];l++)
a[j][l]=a[j][l+1];
t[j]--;
break;
}
}
}
x++;
}
for(int i=1;i<=n;i++) cout<<f[i]<<' ';
}