标题:百度之星题目
只看楼主
haomingli
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-6-11
得分:0 
回复 9楼 cosdos
代码给我看看
2011-06-11 21:15
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
最简单的做法就是每秒中计算一下每把武器的伤害,然后找到最小的一个
效率好一点的算法就是每秒钟都抛弃掉在这一秒之后伤害不可能为最小的武器
2011-06-11 21:22
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
得分:1 
看这个满足不,方法是voidx说的笨的但容易想


#include <stdio.h>

int main()
{
    int n,k,c,d;
    int t=0;
    int y;
    int i,j,p=0;
    int b[100];
    scanf("%d%d",&n,&k);
    int a[100][2];
    for(i=0;i<n;i++)
        scanf("%d%d",&a[i][0],&a[i][1]);
    c = k/n;
    do
    {
        for(i=0;i<n;i++)
        {
            b[p] = a[i][0] + a[i][1] * t;
            p++;
        }
        t++;
    }while(t <= c+1);
    for(i=0;i<p-1;i++)
        for(j=0;j<p-1;j++)
        {
            if(b[j]>b[j+1])
            {
                d = b[j];
                b[j] = b[j+1];
                b[j+1] = d;
            }
        }
    printf("%d\n",b[k-1]);
    return 0;
}
2011-06-11 21:36
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
得分:0 
噢,do 循环中
t ++ 放在 for 循环之前
不然输出结果差 1

就是
do
    {
         t++;
        for(i=0;i<n;i++)
        {
            b[p] = a[i][0] + a[i][1] * t;
            p++;
        }
      }while(t <= c+1);
2011-06-11 21:44
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
得分:0 
晕……之前的还是有 bug ,这下应该是没问题了,
我这输入的格式是
2 5                //表示有两个武器,输出第 5 小的血量
2 2                //第一个武器是 2 2
1 7                //第二个武器是 1 7


然后输出
12                 //第 5 小血量是 12

#include <stdio.h>

int main()
{
    int n,k,c,d;
    int t=0;
    int judge=1;
    int y;
    int i,j,p=0;
    int b[100]={0};
    scanf("%d%d",&n,&k);
    int a[100][2];
    for(i=0;i<n;i++)
        scanf("%d%d",&a[i][0],&a[i][1]);
    c = k;
    do
    {
        t++;
        for(i=0;i<n;i++)
        {    judge = 1;
            for(j=0;j<p;j++)
                if(b[j] == a[i][0] + a[i][1] * t)
                    judge = 0;
            if(judge == 0)
                continue;
            else
            {
                b[p] = a[i][0] + a[i][1] * t;
                p++;
            }
        }
    }while(t <= c+1);
    for(i=0;i<p-1;i++)
        for(j=0;j<p-1;j++)
        {
            if(b[j]>b[j+1])
            {
                d = b[j];
                b[j] = b[j+1];
                b[j+1] = d;
            }
        }
        printf("%d\n\n",b[k-1]);
        for(i=0;i<k;i++)
            printf("%d   ",b[i]);
    return 0;
}
2011-06-11 22:07
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
我之前说的算法是错误的,想得太简单了
2011-06-11 22:31
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:1 
从时刻1开始的每个整数时刻,度度熊可以从自己的武器中挑选一个武器攻击僵尸一次,也可以
攻击僵尸。一件武器可以在不同的时刻使用多次。
由于度度熊武器的限制,不是每个血量的僵尸都能杀死。度度熊希望能知道能杀死的僵尸中第k小的血量值是多少
谁能解释一下这两句话,看不太明白。

My life is brilliant
2011-06-12 08:23
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:1 
想得太简单了,数据不会给你一下子打死的数据,有的时候需要等几秒中再打才能消灭它,而且找到了以后未必是最优解

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-06-12 08:50
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:0 
不过这题可以搜索,但是看看数据量就知道不行了

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-06-12 08:57
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:1 
那个样例输入怎么回事呀?人说了会有几行的输入,结果给的例子就一行……
2011-06-12 10:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-342514-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.433996 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved