博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#C++初学记录(算法4)
阅读量:5289 次
发布时间:2019-06-14

本文共 3422 字,大约阅读时间需要 11 分钟。

A - Serval and Bus

It is raining heavily. But this is the first day for Serval, who just became 3 years old, to go to the kindergarten. Unfortunately, he lives far from kindergarten, and his father is too busy to drive him there. The only choice for this poor little boy is to wait for a bus on this rainy day. Under such circumstances, the poor boy will use the first bus he sees no matter where it goes. If several buses come at the same time, he will choose one randomly.

Serval will go to the bus station at time t, and there are n bus routes which stop at this station. For the i-th bus route, the first bus arrives at time si minutes, and each bus of this route comes di minutes later than the previous one.

As Serval's best friend, you wonder which bus route will he get on. If several buses arrive at the same time, you can print any of them.

Input

The first line contains two space-separated integers n and t (1≤n≤100, 1≤t≤105) — the number of bus routes and the time Serval goes to the station.

Each of the next n lines contains two space-separated integers si and di (1≤si,di≤105) — the time when the first bus of this route arrives and the interval between two buses of this route.

Output

Print one number — what bus route Serval will use. If there are several possible answers, you can print any of them.

Examples

Input
2 2
6 4
9 5
Output
1
Input
5 5
3 3
2 5
5 6
4 9
6 1
Output
3
Input
3 7
2 2
2 3
2 4
Output
1
正确代码

#include
using namespace std;int main(){ long long s[105],d[105], maxx = INT_MAX, flag = 0, n, t,temp,temp1; scanf("%lld%lld", &n, &t); for(int i = 1; i <= n; i++){ scanf("%lld%lld", &s[i], &d[i]); if(s[i] >= t && maxx>s[i]){ maxx = s[i]; if(maxx == t){ flag = 1; temp1 = i; } temp = i; } } //cout << maxx <<" " <
<< endl; if(maxx != INT_MAX &&flag == 1){ printf("%lld\n", temp1); return 0; } for(int i = 1; i <= n; i++){ while(maxx > s[i] && s[i] < t){ s[i] += d[i]; } }// for(int i = 1; i <= n; i++){// printf("%lld ", s[i]);// }// printf("\n"); for(int i = 1; i <= n; i++){ if(maxx > s[i]){ maxx = s[i]; temp = i; } } printf("%lld\n", temp);}

代码理解

nt的意义分别是公交车的数量和主人公到达的时间,每一路段的公交车都和现实生活中一样由多辆公交车有时段间隔的进行行驶,之后n个循环输入的s和d是每段首辆公交车到主人公站点的时间和下一辆车到达时间的间隔,maxx里面存储的是最短时间,即公交车不管是首班还是中途哪班只要间隔和主人公到达时间最短则会保存在maxx变量里面。因为要输入n个数据进入s和d数组,所以maxx里的数据会不停的改变。这里有几个极限判断,即是车到达时间和主人公到达时间相同时,则会跳出循环直接输出车次。temp1是记录时间间隔最短的车次、到最后一个数据输入完毕,计算机的运行也到此结束,因此输出step1,结束程序。
错误及调试
自己进行编写代码的时候运行结果正确但是OJ测试一直WRONG,自己曾百思不得其解,之后参考了AC代码并进行了对比发现了错误。

int tex(int a,int b){    if(a
=t) { return a-t; }}

此判断函数是第一次WRONG的判断函数,首要思路是将全部路线的车次到达时间通过数组h进行记录下来,数组的位次为车辆的位次,数组的数据为车辆到达的时间和主人公到达车站时间的间隔,通过这个函数将所有数据进行统一判断是当时编写的主要思路,有一个小细节当时没有考虑到,即是题意规定如果有相同最小时间间隔的车辆进入车站,即同时进入车站,则主人公会随机选一辆车进入,换言之就是第几辆车的输出是由编写代码的人决定的,因此,在判断出时间间隔为0的时候可以直接进行输出结束程序继续运行,这样可以节省大部分的运行时间。

以下是错误部分源代码:

for(int i=1;i<=n;i++)    {        if(h[i]>h[i-1])        low=i-1;    }    cout<
<<"\n"; return 0;}

在进行判断时,只进行了数组前后的判断,即h1和h2,h2和h3判断,从而或略了对全局的判断,因此我将代码进行修改:

int minn=h[1];    for(int i=1;i<=n;i++)    {        if(minn>h[i])        {            low=i;            minn=h[i];        }    }

这样就解决了程序判断不准确的问题,并且完成程序输出得到正确答案。

转载于:https://www.cnblogs.com/xiaofengqaq/p/10725501.html

你可能感兴趣的文章
【bzoj4872】[Shoi2017]分手是祝愿 期望dp
查看>>
字符串元转分
查看>>
程序员网址大全(转)
查看>>
thinkphp 防sql注入
查看>>
Go语言规范1 - 统一规范篇
查看>>
s5-11 距离矢量路由选择协议
查看>>
MSSQL-SQL SERVER一些使用中的技巧
查看>>
用Vue中遇到的问题和处理方法(一)
查看>>
ASP.Net 打通服务器代码和前台界面的特殊符号
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
winform 实现类似于TrackBar的自定义滑动条,功能更全
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
RAP在centos上的部署
查看>>
java 8 新特性
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
VS2015 create a C++ console application based on WinRT
查看>>
c++回调函数
查看>>
神经网络初探
查看>>
linux下Rtree的安装
查看>>