T31901 狂热粉丝

点击打开链接

总所周知,qwf是计算机学院最帅的人,他的粉丝很多,

而qwf对他的粉丝并不热情,甚至有时躲着粉丝们,

但他很腼腆,不会拒绝狂热的粉丝们。

现在qwf遇到了危机,n名粉丝在他身后追赶他,而他却和chj约好回寝室玩游戏,

只要qwf被其中一个狂热的粉丝追上,粉丝就会索要签名,并瞬间召唤来更多狂热的qwf爱好者,

也就是说,只要被粉丝追上,qwf就会被粉丝所掩埋,不能回寝室找chj了。

现在qwf在S点 寝室在E点 以速度V直线飞奔至寝室

粉丝i(1-n)在Si点 以速度Vi追赶qwf

qwfz在抵达寝室的瞬间被追上是没关系的,因为chj会把粉丝抵挡在门外

有些粉丝可能太激动,站在原地速度为0

如果qwf可以顺利回到寝室就输出“winner winner chicken dinner!!”

否则输出“haojie help me!!”

输入输出格式

输入格式:

第一行:N 表示接下来有N组数据

每组数据

第一行:n S E V

接下来n行:Si Vi 表示第i个粉丝的初始位置和速度

N<150;
n<=1000;
(-2^30)<Si<S<E<(2^30)
(-2^30)<V,Vi<(2^30)

输出格式:

对于每组数据,如果qwf可以顺利回到寝室就输出“winner winner chicken dinner!!”

否则输出“haojie help me!!”


输入输出样例

输入样例#1:  复制
2
2 0 8 2
-8 4
-16 5
2 0 8 2
-8 5
-16 5
输出样例#1:  复制
winner winner chicken dinner!!
haojie help me!!
 
       

本题实际上就是一个很普通的追及问题,只需要算出qwf到寝室的时间和粉丝到寝室的时间,如果qwf的时间t小于等于所有粉丝到达他寝室的时间,他就不会被淹没了。(解题思路)

代码实现如下:

#include<iostream>

using namespace std;

int main()
{
    int N;
    cin>>N;
    while (N--)
    {
        long long n,S,E,coun=0,V;
        double t1,len;
        cin>>n>>S>>E>>V;
        len=E-S;
        t1=len*1.000000/V;
        for(int i=0;i<n;i++)
        {
            long long int s,v;
            double t,len1;
            cin>>s>>v;
            len1=E-s;
            if(v==0)continue;
            t=len1*1.000000/v;
            if(t<t1) coun=1;
        }
        if(coun==0)cout<<"winner winner chicken dinner!!"<<endl;
        else cout<<"haojie help me!!"<<endl;

    }
}

但是在此处发现一个问题,在比赛的时候,代码的长度应当尽量精简。像上面代码中,qwf和粉丝与寝室的距离和速度完全可以用len,v两个变量所代替,而我所写的用了4个,增加了代码的长度,但相比于考试时给出的ac代码,却少了程序的运行时间,这是我很奇怪的,现将ac代码贴于下,希望有大神能够给答疑解惑。

//ac代码
#include <iostream>

using namespace std;

int main() {
    int N;
    long long n,s,e,v;
    cin>>N;
    while(N--) {
        cin>>n>>s>>e>>v;
        double joo=e-s,t;
        joo/=v;
        int f=1;
        for(int i=0;i<n;i++){
            cin>>s>>v;
            t=e-s;
            if(v==0)continue;
            t/=v;
            if(t<joo){
                f=0;
            } 
        }
        if(f==1)cout<<"winner winner chicken dinner!!"<<endl;
        else cout<<"haojie help me!!"<<endl;
    }
}

(ac代码的用时和内存)

76ms/2121KB(自己的代码的用时和内存)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值