厚积薄发 发表于 2010-5-6 18:54

2006 年百度之星程序设计大赛初赛题目 3

**的比赛规则

为了促进各部门员工的交流,百度 (baidu) 举办了一场全公司范围内的 " 拳皇友谊赛 " ,负责组织这场比赛的是百度的超级 " 拳皇 " 迷 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 场比赛。

相信作为编程高手的你一定知道该怎么回答这个问题了吧? 那么现在请你帮助 W.Z 吧。

输入

每行为一组数据,包含两个数字 N, K 。 (0<N<=500, K>=0)

输出

对输入的 N,K 如果 N 个员工通过一定的分组方式可能会一共需要 K 场比赛,则输出 "YES", 否则输出 "NO", 每组数据占一行。

所有的输入输出均为标准输入输出。

例子

输入样例

2 0

2 1

3 1

3 2


输出样例

YES

YES

NO

YES
example1:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;


bool bt(int N,int K,int min,int count)
{
     //cout<<N<<"|"<<min<<"|"<<count<<endl;
     for(int i=min;i<=(N+1)/2;i++)//zhu1 i
    {
        int tmpc=count;
        for(int j=0;j<i;j++)
        tmpc+=N-i;
        if(tmpc==K)return true;
        //zhu2 N-i
        if(bt(N-i,K,i,tmpc))return true;
    }
    return false;
}
int main(int argc, char *argv[])
{
    //ifstream inf("input.txt");
    string str;
    int N,K;
    int count;
    //getline(inf,str);
    getline(cin,str);
    sscanf(str.c_str(),"%d %d",&N,&K);      
    if(bt(N,K,1,0))cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
example2://============================================================================
// Name        : 1.cpp
// Author      : Xusen Yin
// Version     :
// Copyright   : Your copyright notice
// Description : **的规则
//=========================================================================
#include <iostream>
#include <bitset>
using namespace std;
#define MAX 128
int main(){
    int n = 0,k = 0;
    bitset<MAX> bAssert;
    cout << "请输入 N K (以 -1 , -1结束):" << endl;
    size_t j = 0;
    while(1){
        cin >> n >> k;
        if(n == -1 || k == -1)
            break;
        for(int i = 0 ; i <= n/2 ; i++)
            if(i * (n - i) == k){
                //是OK的
                bAssert.set(j);
                break;
            }
        j++;
    }
    for(size_t i = 0 ; i <= bAssert.count() ; i++){
        if(bAssert.test(i))
            cout << "YES" << endl;
        else
            cout << "NO" <<endl;
    }
    return 0;
}

example3:
import java.io.IOException;
import java.util.Random;

public class BtRaceRule
{
    private static int p_number;//人数
    private static int r_number;// 比赛场数
    public static void logic(int n,int m)
    {
        int flag = 0;
        for(int i=0;i<=n/2;i++)
        {
            int j = n-i;
            if(i*j==m)
            {
               flag = 1;
            }
        }
        if(flag==1)
        {
            System.out.println("Yes");
        }
        else
        {
            System.out.println("No");
        }
    }
    public static void main(String[] args) throws IOException
    {
        BtRaceRule[] rule = new BtRaceRule;
        GetData data = new GetData();
        System.out.println("输入比赛人数和可能的比赛场数:");
        Random r = new Random();
        for(int i=0;i<rule.length;i++)
        {
            rule.p_number=Math.abs(data.integer());  
            
            rule.r_number=Math.abs(data.integer());
         
            System.out.println(rule.p_number+" "+rule.r_number);
            //输出一组分组和可能的比赛次数
            logic(rule.p_number,rule.r_number);
            //逻辑判断,并输出结果  yes or no
        }   
    }
}

发表于 1970-1-1 08:00

hangdao 发表于 2011-1-13 10:58

这是什么东东~~~~

gbqje 发表于 2011-8-18 16:31

顶你一下,好贴要顶!

IT9学院站,它的宗旨是为广大电脑爱好者提供学习和交流的平台 可以学到国内最齐全的电脑技术,学习的电脑知识门类齐全,教学兼备;能在线学习电脑技术,并且设有论坛交流中心,是国内优秀电脑技术学习基地。

IT9学院网络,一个专为您量身定做的优秀平台。

IT9学院it9.com/ 一直致力于为广大电脑知识爱好者提供全面、专业、权威的软件使用教程,如网络软件、系统工具、聊天工具、编程开发、图形图象等各种软件应用、技巧以及解决方案等,是大家学习专业计算机知识的最佳场所。

国内最齐全的电脑技术学习基

IT9学院站是国内最齐全的电脑技术学习网站,他的教学课程门类齐全,应有尽有,完全覆盖了从基础到高端教与学的知识面,不但适合广大电脑兴趣爱好者进行知识普及,还非常适合大中专院校学生和电脑科技从业人员专业知识技能提升和交流。

IT9学院教授课程内容包括办公应用、图形处理与设计、网吧技术、攻防专区、编程开发、网站建设与开发、系统专区等。每个大类专区又细分小类,如办公应用专区细分Powerpoint教程 、Excel教程 、Outlook教程、Word教程 、FruityLoops教程 、Reason教程 。系统专区细分C#教程 、java教程 、VB教程 、Jsp教程 、Asp教程 、VC教程、易语言教程 、Php教程等等。IT9学院提供图文,视频教程,甚至在线交流等方式开展教学,是一个门类齐全、内容详尽、直观易懂的网络课堂。

门类齐全,教学兼备

对于电脑爱好者来说,IT9学院开设的视频教程区为其提供网上直观的操作与视频演示,并提供了详细的大中专院校客座教授在线教学,可谓门类齐全教学兼优,同时IT9学院网不仅设有工具发布区、软件资源区 、黑客软件区等工具类下载栏目,同时还配套设置了数码资讯、硬件交流区 、软件交流区、疑难解答区 、贵宾学习区、免费资源区、视频教程区等,可谓教学兼备,边学边实践,真正做到了动手,动脑学习。

IT9学院站不仅可以在线学习电脑技术知识,而且还设有论坛交流中心 bbs.it9.com 和软件下载. 提供各位电脑爱好者或提问或分享经验等交流,在这里不论你是大虾还是菜鸟,都能找到你想要的东西,下载到你想要的软件.提高你具备的本领,同时也能分享你在计算机领域的“成就”, 因为我们是IT9学院,一个真正为广大电脑爱好者提供学习和交流的平台。

由腾讯、网易、新浪.admin5站长论坛共同推荐的电脑学院技术站:

腾讯digi.tech.qq.com/a/20110601/001268.htm
网易 news.163.com/11/0602/11/75HPKJ0U0001125P.html
新浪 finance.sina.com.cn/roll/20110602/12219937561.shtml
A5:bbs.admin5.com/thread-2686329-1-1.html
IT9网络学院:it9.com

qo1211 发表于 2011-8-31 14:22

{:3_41:}百度算法大赛的题目~O~反正我目前是编不出来

神Y殇 发表于 2011-10-15 21:45

..................................











static/image/common/sigline.gif
51koo.net黑客论坛 soyangsyl.com搜羊娱乐新闻网

ehi28 发表于 2011-12-11 16:23

嗯,不错,支持一下.

schnee 发表于 2012-2-6 17:33

顶!!!!!!!

发表于 1970-1-1 08:00

laogao598 发表于 2012-4-29 10:23

顶!!!!!!!
页: [1] 2
查看完整版本: 2006 年百度之星程序设计大赛初赛题目 3