BestCoder#27两道水题 HDU5162&&5163
来源:互联网 发布:软件功能说明书模板 编辑:程序博客网 时间:2024/06/05 23:42
= = 好久没做题了,又是准备期末考试(OS概念太多。。。),晚上休息的时候又一直在迷之看历史转折中的邓小平= = ,忘了BC,刚刚看完了就看了下今天的BC过题术,然后把前两题水过了,第一题:
Jump and Jump...
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 714 Accepted Submission(s): 422
问题描述
有n 小孩在比赛跳远,看谁跳的最远。每个小孩可以跳3次,这个小孩的成绩就是三次距离里面的最大值。例如,一个小孩跳3次的距离分别时10, 30和20,那么这个小孩的成绩就是30。给出每个孩子三次跳的距离,问最终每个孩子的排名是多少。
输入描述
输入文件的第一行有一个整数T (1≤T≤100) ,表示测试数据的组数。对于每组测试数据:第一行包括一个整数n (2≤n≤3) , 表示孩子的数目. 接下来n 行, 每行包含三个整数ai,bi 和ci (1≤ai,bi,ci,≤300 ), 表示第i 个小孩每次的跳的距离。输入数据保证每个孩子的成绩互不相同。
输出描述
对于每组数据,输出一行包含n 个整数,用一个空格隔开。第i 个数表示第i 个小孩的最终名次。
输入样例
2310 10 1010 20 3010 10 2023 4 11 2 1
输出样例
3 1 21 2提示:对于第一组数据,3个孩子的成绩分别时10, 20和30。因此他们最终排名依次是3, 1和2.
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>using namespace std;int main(){ int t; cin>>t; while(t--) { int n; cin>>n; int d[10]; int a,b,c; for(int i=0;i<n;i++) { cin>>a>>b>>c; d[i]=max(a,max(b,c)); } for(int i=0;i<n;i++) { int rk=0; for(int j=0;j<n;j++) { if(d[j]>=d[i]) { rk++; } } if(i==n-1) { cout<<rk<<endl; } else { cout<<rk<<" "; } } } return 0;}
第二题:
Taking Bus
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 954 Accepted Submission(s): 213
问题描述
Bestland有一条非常长的马路,马路上设有n 个公交汽车站。公交汽车站从左到右标号为1到n 。有m 个人想要乘公交。你的任务是找出每个人到终点为止所需要的时间。注意:你需要用来解决这道题目的信息在Input里面,请仔细阅读。
输入描述
输入的第一行包含一个整数T (1≤T≤60) ,表示测试数据的组数。对于每组测试数据:第一行包含两个整数n 和m (2≤n,m≤105) ,表示公交车站的数目和乘客的数目。 接下来一行包含n−1 个整数,d1,d2,…,dn−1 (1≤di≤109 ).di 表示第i 个公交站和第i+1 个公交站之间的距离。在接下来的m 行, 每行包含两个整数xi 和yi (1≤xi,yi≤n,xi≠yi ), 表示第i 个人时刻0的时候在第xi 个公交站并且想要到第yi 个公交站去。(1≤i≤m) 对于第i 个人, 公交车在第((i−1) mod n)+1 个公交站点在时刻0的时候,并且公交一开始往右开。公交到达站点n 的时候会立刻转向往左开,同样当公交到达站点1的时候也会立刻转向往右开。你可以认为公交每秒只开一个单位距离,你只需要考虑公交开的时间。
输出描述
对于每个人,输出到达yi 个公交站点需要的最少时间。
输入样例
17 32 3 4 3 4 51 74 55 4
输出样例
211028提示:对于第一个人, 公交在站点1出发, 然后这个人在时刻0上车。21秒之后,公交到达站点7。对于第二个人,公交在站点2出发。7秒之后,公交到达站点4,这个人上车。之后又过了3秒,公交到达站点5.总共用了10秒。对于第三个人,公交在站点3出发。7秒之后,公交到达站点5,这个人上车。之后过了9秒,公交达到站点7,然后转向开往站点0。之后经过12秒,公交达到站点4。因此总共需要28秒时间。
大致按照起始站和公交车的起点的大小分成两大类,两大类里面再分起始站和终点站的位置来考虑,6种情况。。。
第一大类:
公交车起点站s<=x则有:
s<=x<y
s<=y<x
y<s<x
第二大类同理:
x<s<y
x<y<=s
y<x<=s
然后画个图模拟一下就好了- -
然后一开始脑残想暴力去O(NM)的直接算,看了下数据妥妥T,然后稍微处理了一下前缀和就OK了- -
数据量比较大,我一看到就全场long long了,无脑1A。。。。
都不难但是好久没敲,脑子又生锈了。。。。
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>using namespace std;long long n,m;long long d[100005];long long dis[100005];long long x,y;long long s;long long t;long long slove(long long x,long long y,long long s){ long long res=0; if(s<=x) { res+=dis[x]-dis[s]; if(x<=y) { res+=dis[y]-dis[x]; } else { res+=2*dis[n]-dis[x]-dis[y]; } } else { res+=dis[n]-dis[s]+dis[n]-dis[x]; if(y<=x) { res+=dis[x]-dis[y]; } else { res+=(dis[x]-dis[0])+(dis[y]-dis[0]); } } return res;}int main(){ cin>>t; while(t--) { cin>>n>>m; for(long long i=1;i<n;i++) { cin>>d[i]; } dis[1]=0; for(long long i=2;i<=n;i++) { dis[i]=dis[i-1]+d[i-1]; } for(long long i=1;i<=m;i++) { cin>>x>>y; cout<<slove(x,y,(i-1)%n+1)<<endl; } } return 0;}
0 0
- BestCoder#27两道水题 HDU5162&&5163
- BestCoder#27
- hdu 5163 Taking Bus (BestCoder Round #27)
- BestCoder Round #27 D
- BestCoder Round #27
- BestCoder
- bestcoder
- [Bestcoder] Round #27 1001、1002 | HDU 5162、5163
- BestCoder#28两道水题 HDU5166&&5167
- 【BestCoder】 HDOJ 5163 Taking Bus
- BestCoder 的两道水题 HDU 4989 4990
- Bestcoder 27 # A jump and jump
- BestCoder 20140727
- BestCoder#3
- Bestcoder #11
- bestcoder #14
- BestCoder #20
- bestcoder lines
- 利用openssl创建一个简单的CA
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接---个人整理
- 如何用Tomcat和Openssl构建HTTPS双向认证环境(HTTPS客户端认证)
- git基本操作的一些实用笔记
- Struts2整合Spring从xml到注解
- BestCoder#27两道水题 HDU5162&&5163
- ACM第6天 Dp进阶HDU 1421 搬寝室
- C/C++编程相关问题总结
- 实用命令:利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
- HDU 1005 Number Sequence
- Android SDK 更新时连接出现“https://dl-ssl.google.com refused”异常解决办法
- web.xml 详细介绍
- Box2D物理引擎模拟炸弹爆炸效果
- nginx模块开发(三):upstream