梦之队 (Wonder Team,Tehran 2007,LA 4094)

本文详细解析了代码逻辑,特别关注了当输入n在特定区间内的不同情况下的输出规律,并通过矩阵构造展示了如何在n大于等于5时构建特定模式。通过分析,最终给出了6个排列的具体例子。
 1 #include <iostream>
 2 #include <string.h>
 3 #include <string>
 4 #include <fstream>
 5 #include <algorithm>
 6 #include <stdio.h>
 7 #include <vector>
 8 #include <queue>
 9 using namespace std;
10 #define MAXN 10002
11 int main()
12 {
13     int n;
14     while(scanf("%d",&n),n!=0)
15     {
16         if(n<=3)printf("1\n");
17         else if(n==4)printf("2\n");
18         else printf("%d\n",n);
19     }
20 
21 
22     return 0;
23 }
View Code

对于1<=n<=3  明显是1

 

对于n=4 可以发现答案是2

 

对于n>=5  我用下列矩阵表示一个构造,证明WonderTeam可以是最后:对于每个队伍的胜场,平局,败场分别用2,1,0表示,(最后一行是WonderTeam)

矩阵有n行,表示n个队伍;2*n-2列,表示某场比赛的胜负

由于进球数目和输球数目是任意的,所以我们可以假设每场比赛的失球数目和进球数目,则明显每个队伍都要有负场才行。

 

21111110    我们对这个矩阵进行微调,得到  22111110 

21111110                                                     22111110

21111110                                                     22111100

21111110                                                     22111100

22000000                                                     22200000

这是一个最后一名的构造

 

对于n>5的情况,构造法相同:1-n-1行每行开头是2,末尾是0(因为要有失球数),中间是1,最后一行开头是两个2,其余都是0,然后根据情况进行调整(从上到下将1变成2之类),使得最后一行的2最多,且分数最少即可

 

给出6的排列

2211111110

2211111110

2111111110

2111111110

2111111110

2220000000

 

所以最终的代码只要判断一下即可。。。

以上摘自http://hi.baidu.com/isaacpei/item/1d8907c39392bc105150583c

逗比了很久~~

转载于:https://www.cnblogs.com/TO-Asia/p/3190636.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值