#C++初学记录(算法4)
**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<bits/stdc++.h>
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 <<" " <<temp << 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);
}
代码理解
n和t的意义分别是公交车的数量和主人公到达的时间,每一路段的公交车都和现实生活中一样由多辆公交车有时段间隔的进行行驶,之后n个循环输入的s和d是每段首辆公交车到主人公站点的时间和下一辆车到达时间的间隔,maxx里面存储的是最短时间,即公交车不管是首班还是中途哪班只要间隔和主人公到达时间最短则会保存在maxx变量里面。因为要输入n个数据进入s和d数组,所以maxx里的数据会不停的改变。这里有几个极限判断,即是车到达时间和主人公到达时间相同时,则会跳出循环直接输出车次。temp1是记录时间间隔最短的车次、到最后一个数据输入完毕,计算机的运行也到此结束,因此输出step1,结束程序。
错误及调试
自己进行编写代码的时候运行结果正确但是OJ测试一直WRONG,自己曾百思不得其解,之后参考了AC代码并进行了对比发现了错误。
int tex(int a,int b)
{
if(a<t)
{
a=a+b;
tex(a,b);
}
else 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<<low<<"\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];
}
}
这样就解决了程序判断不准确的问题,并且完成程序输出得到正确答案。
#C++初学记录(算法4)的更多相关文章
- #C++初学记录(贪心算法#结构体#贪心算法)
贪心算法#结构体 Problem Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋 ...
- #C++初学记录(算法效率与度量)
时间性能 算法复杂性函数: \[ f(n)=n^2 +1000n+\log_{10}n+1000 \] 当n的数据规模逐渐增大时,f(n)的增长趋势: 当n增大到一定值以后,计算公式中影响最大的就是n ...
- #C++初学记录(贪心算法#二分查找)
D - Aggressive cows 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 < ...
- #C++初学记录(算法考试1)
B - Maximal Continuous Rest Each day in Berland consists of n hours. Polycarp likes time management. ...
- #C++初学记录(算法3)
C - 不要62 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司 ...
- #C++初学记录(算法2)
A - Game 23 Polycarp plays "Game 23". Initially he has a number n and his goal is to trans ...
- #C++初学记录(算法测试2019/5/5)(深度搜索)
深度搜索:Oil Deposits GeoSurvComp地质调查公司负责探测地下石油储藏. GeoSurvComp现在在一块矩形区域探测石油,并把这个大区域分成了很多小块.他们通过专业设备,来分析每 ...
- #C++初学记录(sort函数)
sort函数 前言:当进行贪心算法的学习时,需要用到sort函数,因为初学c++汇编语言,sort的具体用法没有深入学习,所以这里进行sort学习记录并只有基础用法并借用贪心算法题目的代码. 百度百科 ...
- #C++初学记录(动态规划(dynamic programming)例题1 钞票)
浅入动态规划 dynamic programming is a method for solving a complex problem by breaking it down into a coll ...
随机推荐
- key是数字的对象集合
整理如下: let data = {3: '影视', 4: '音乐', 5: '广场舞', 6: '游戏', 7: '综艺', 8: '动漫', 9: '翻唱', 10: '生活', 11: '美食' ...
- openvpn 负载均衡方案
这些方案的前提是,vpnserver的key都是一样的.方案1在openvpn客户端设两个配置文件,我们自己手动去连接去选择方案2在openvpn 的配置文件里面加个随机参数remote 8.8.8. ...
- mongodb gridfs基本使用
Mongodb GridFS图片文件存储解决方案 之前解决方案是接收图片数据后,将图片直接存储到盘阵,然后通过Apache做服务器,将图片信息存储到数据库,并且存储一个Apache的访问路径. 目前需 ...
- Linux主机添加路由和端口转发
环境(关闭防火墙和seLinux): 6A: CentOS6 7A 和 7B:CentOS 7 6A: 192.168.20.131/24 7B: 192.168.20.129/24 和 192.16 ...
- 以太网端口二种链路类型:Access 和Trunk
Access 类型的端口:只能属于1 个VLAN,一般用于连接计算机的端口: Trunk 类型的端口:可以允许多个VLAN 通过,可以接收和发送多个VLAN 的报文,一般用于交换机之间连接的端口 ...
- locate命令的使用
使用locate命令,遇到了这样的情况:当前目录下有一个文件,而使用这个命令时却查找不到这个文件,上网查了一下,找到了原因,就在下面. 1. find find是最常见和最强大的查找命令,你可以用它找 ...
- 【LOJ6254】最优卡组 堆(模拟搜索)
[LOJ6254]最优卡组 题面 题解:常用的用堆模拟搜索套路(当然也可以二分).先将每个卡包里的卡从大到小排序,然后将所有卡包按(最大值-次大值)从小到大排序,并提前处理掉只有一张卡的卡包. 我们将 ...
- [SQL] 用SQL语句检查CPU和磁盘空间
在MS Sql Server中可以能过以下的方法查询出磁盘空间的使用情况及各数据库数据文件及日志文件的大小及使用利用率: 1.查询各个磁盘分区的剩余空间:Exec master.dbo.xp_fixe ...
- Unity3D笔记十六 输入输出-键盘事件、鼠标事件
输入与控制操作Unity为开发者提供了Input类库,其中包括键盘事件.鼠标事件和触摸事件等一切跨平台所需要的控制事件. 一.键盘事件 1.按下事件 Input.GetKeyDown():如果按键被按 ...
- Unity3D笔记十三 摄像机之间切换
using UnityEngine; using System.Collections; public class _5_6 : MonoBehaviour { private GameObject ...