鹊桥相会

鹊桥相会

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

一年一度的七夕又要到了,可歌可泣的牛郎织女又可以在鹊桥相会了。不知道大家有没有雅兴陪redraiment坐在葡萄藤下倾听他们的对话。
我们知道,牛郎要与织女相见,必须要有喜鹊搭桥。所以,牛郎必须在天河岸上等待,直到有喜鹊经过,于是牛郎可以搭乘这只喜鹊往河对岸走。当然,牛郎急着去见织女,所有在途中,如果有速度更快的喜鹊赶上了他,他就会换乘那只速度更快的喜鹊。
我们可以假定喜鹊的速度是恒定不变的,并且喜鹊一直是沿直线飞行的(不转弯,更不回头),牛郎坐上喜鹊所花的时间忽略不计。  
现给出天河的宽度、每只喜鹊的初始位置(我们设牛郎所在位置为0,天河方向为正方向)以及它们的速度(有可能是负数,代表喜鹊往反方向飞行),这些数据都是整数。请你来帮忙计算一下牛郎到达对岸与织女相会最少需要多少时间,让他们早些有情人终成眷属。^_^
当然,如果没有喜鹊来搭载牛郎,我们可怜的牛郎就到不了对岸与织女相会了,那我们只好很遗憾的跟牛郎说:“Can't Solve”,我们祈祷不要发生这样的事情。

输入

第一行有两个数据w、n,分别代表天河的宽度(单位:km)和喜鹊的只数(1≤w≤1000, 1≤n≤10000)。
接下来从第二行到第n+1行每行都有两个数据t、v,分别代表1只喜鹊的初始位置(单位:m)和它的飞行速度(单位:m/s)(-1000≤t≤1000, -100≤v≤100)。 所有的数据范围都不会超过32位整数的表示范围(用int型数据不会溢出)。
输入以0 0结束。

输出

如果牛郎能到达对岸输出他到达对岸所花的总时间(结果精确到秒即可,小数部分舍去);否则输出“Can't Solve”。

示例输入

1 1
0 1
0 0

示例输出

1000

提示

 

来源

ZJGSU

示例程序

 
#include<stdio.h>  
struct node  
{  
    int s,v;  
}a[10001],b;  
int main()  
{  
    int i,j,n,m,k,t,l,c,d;  
    while(scanf("%d %d",&n,&m)&&(n||m))  
    {  
        for(i=0;i<m;i++)  
            scanf("%d %d",&a[i].s,&a[i].v);  
        for(i=0;i<m-1;i++)  
        {  
            k=i;  
            for(j=i+1;j<m;j++)  
            {  
                if(a[k].s>a[j].s)  
                    k=j;  
                if(a[k].s==a[j].s&&a[k].v<a[j].v)  
                    k=j;  
            }  
            if(k!=i)  
            {  
                b=a[k];  
                a[k]=a[i];  
                a[i]=b;  
            }  
        }  
        if(a[0].s>0)  
        {  
            printf("Can't Solve\n");  
            continue;  
        }  
        b=a[0];  
        l=n/a[0].v*1000;  
        for(i=1;i<m;i++)  
        {  
            if(a[i].s>b.s)  
                if(n>a[i].s&&a[i].v>b.v)  
                {  
                    l=l+(n-a[i].s)/a[i].v*1000;  
                    b=a[i];  
                }  
            }  
            printf("%d\n",l);  
        }  
    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值