变态比赛规则
来源:互联网 发布:话费流量软件 编辑:程序博客网 时间:2024/03/29 16:17
为了促进各部门员工的交流,百度举办了一场全公司范围内的“拳皇”(百度内部最流行的格斗游戏)友谊赛,负责组织这场比赛的是百度的超级“拳皇”迷W.Z。W.Z不想用传统的淘汰赛或者循环赛的方式,而是自己制定了一个比赛规则。
由于一些员工(比如同部门或者相邻部门员工)平时接触的机会比较多,为了促进不同部门之间的交流,W.Z希望员工自由分组。不同组之间的每两个人都会进行一场友谊赛而同一组内的人之间不会打任何比赛。
比如4个人,编号为1~4,如果分为两个组并且1,2一个组,3,4一个组,那么一共需要打四场比赛:1 vs 3,1 vs 4,2 vs 3,2 vs 4。 而如果是1,2,3一组,4单独一组,那么一共需要打三场比赛: 1 vs 4,2 vs 4,3 vs 4。
很快 W.Z意识到,这样的比赛规则可能会让比赛的场数非常多。W.Z想知道如果有N个人,通过上面这种比赛规则,总比赛场数有可能为K场吗?比如3个人,如果只分到一组则不需要比赛,如果分到两组则需要2场比赛,如果分为三组则需要3场比赛。但是无论怎么分都不可能恰需要1场比赛。
#include <stdio.h>
int main(int argc, char *argv[])
{
int n, k;
if( argc!=3 )
{
printf("use: %s n k", argv[0]);
return -1;
}
n = atoi(argv[1]);
k = atoi(argv[2]);
if(foo(n, k)>0)
printf("YES/n");
else
printf("NO/n");
return 0;
}
int maxT(int n, int m)
{
if( n<=0 || n>500 || m<=0 )
return -1;
if( m==1 )
return n*(n-1)/2;
if( m>=n || n==1 )
return 0;
return m*(n-m)+(n-m)*(n-m-1)/2;
}
int minT(int n, int m)
{
if( n<=0 || n>500 || m<=0 )
return -1;
if( m==1 )
return n*(n-1)/2;
if( m>=n || n==1 )
return 0;
return m*(n-m)+minT(n-m, m);
}
int foo(int n, int k)
{
int max, min;
int m;
if( n<=0 || n>500 || k<0 || k>n*(n-1)/2 )
return -1;
if( k==0 || k==n-1)
return 1;
if( n==1 || k<n-1 )
return -1;
for( m=n; m>0; m-- )
{
max = maxT(n, m);
min = minT(n, m);
if( k<=max && k>=min )
{
if( foo(n-m, k-m*(n-m))>0 )
return 1;
}
}
return -1;
}
- 变态比赛规则
- 程序设计:变态比赛规则
- AStar2006 --- 变态比赛规则问题
- ACM2、变态的比赛规则
- php解:2006 年百度之星程序设计大赛初赛题目 3 ----变态的比赛规则
- 2006年百度之星程序设计大赛试题初赛题目-题3-变态的比赛规则
- "百度之星"程序设计大赛试题解答(Java实现)---变态的比赛规则(未完成!!!)
- 2006 年百度之星程序设计大赛初赛题目 3 变态的比赛规则
- 乒乓球比赛规则
- 羽毛球比赛规则
- 辩论赛比赛规则
- 拖拉机比赛规则
- Codeforces比赛规则
- CodeForces比赛规则
- 变态
- 变态
- 斯诺克 装备、比赛规则
- CodeForces官方比赛规则介绍
- TICPP CHAPTER 11 EX 27 & EX28
- 中移动-摩托罗拉联合启动JAVA应用大赛
- win2003+IIS6+Tomcat5+jk整合(转) - Clear in CNRUI
- 摩托罗拉拿JAVA说事 手机新品将出人意表
- 加多宝 赶紧并购啊
- 变态比赛规则
- 夜幕下的程序员
- 网上选课系统(java)
- 关注地震,学习英语
- 新闻图片切换播放和自动切换播放以及链接功能【js+css设计】
- 快速开发时可以使用的Java文件工具方法
- Web服务与数据集
- CComBSTR类
- 写玩具代码