箭无虚发
2016-06-04 15:08
239 查看
题目链接:http://acm.hfut.edu.cn/OnlineJudge/
题目:
Description
JH苦练10年,终于成为了一个神箭手,在下山之前,大师兄YZ不放心,想考验他,只给他一定时间t,同时给他n支箭,最终根据他的表现,考虑他是否能下山。
对于每发一次箭,YZ给他4种成绩(优、良、中、差),JH有三种拉弓以及瞄准时间a ,b,c(a>=b>=c)分别能拿优,良,中等级,如果不拉弓不瞄(直接射),只能拿差(不能中靶)了。
现在JH想知道,在保证自己弹无虚发(不获得差)的情况下,最多能拿多少个优。
如果JH不能做到弹无虚发,输出Oh,my god!
Input
输入数据包含T组:
对于每组数据,第一行为一个整数n,表示总共有n支箭。
(0<n<=1000)
之后n行,每行包含三个数字a,b,c,分别表示拿对应等级所需要花的时间。
(0<c<=b<=a<=1000)
之后一个数字t,表示JH有考核总时间为t
(0<=t<=1e6)
Output
对于每组输入,如果JH能箭无虚发,则输出一个数字x,表示最多能拿到的优的数量。如果不能,则输出Oh,my god!
Sample Input
3
1
3 2 1
1
2
3 2 1
3 2 1
4
2
3 2 1
3 2 1
1
Sample Output
0
1
Oh,my god!
分析:比赛的时候被这道题目卡住了,后来就没出过题。现在有n支箭,射箭有优
4000
、良、差三种结果,想要得到每种结果需要不同的瞄准时间,分别是a,b,c,并且a>=b>=c,给总时间t,如果不能全部射中,即至少是差,则输出"Oh, my god!",否则,输出能够得到最多的优的数量。刚开始的思路是贪心,进行排序,a越小排在前面,a相同则c越小排在前面。然后加入答案是ans=n,每次取ai,time=time+ai,如果time大于t则取ci,然后ans--。
正解:sum=c1+c2+……+cn,然后把di=ai-ci排序,t-sum看可以去多少di,就是答案。也就是说ci是必须要花费的时间,至于是否取优,则贪心选取。
代码:
题目:
Description
JH苦练10年,终于成为了一个神箭手,在下山之前,大师兄YZ不放心,想考验他,只给他一定时间t,同时给他n支箭,最终根据他的表现,考虑他是否能下山。
对于每发一次箭,YZ给他4种成绩(优、良、中、差),JH有三种拉弓以及瞄准时间a ,b,c(a>=b>=c)分别能拿优,良,中等级,如果不拉弓不瞄(直接射),只能拿差(不能中靶)了。
现在JH想知道,在保证自己弹无虚发(不获得差)的情况下,最多能拿多少个优。
如果JH不能做到弹无虚发,输出Oh,my god!
Input
输入数据包含T组:
对于每组数据,第一行为一个整数n,表示总共有n支箭。
(0<n<=1000)
之后n行,每行包含三个数字a,b,c,分别表示拿对应等级所需要花的时间。
(0<c<=b<=a<=1000)
之后一个数字t,表示JH有考核总时间为t
(0<=t<=1e6)
Output
对于每组输入,如果JH能箭无虚发,则输出一个数字x,表示最多能拿到的优的数量。如果不能,则输出Oh,my god!
Sample Input
3
1
3 2 1
1
2
3 2 1
3 2 1
4
2
3 2 1
3 2 1
1
Sample Output
0
1
Oh,my god!
分析:比赛的时候被这道题目卡住了,后来就没出过题。现在有n支箭,射箭有优
4000
、良、差三种结果,想要得到每种结果需要不同的瞄准时间,分别是a,b,c,并且a>=b>=c,给总时间t,如果不能全部射中,即至少是差,则输出"Oh, my god!",否则,输出能够得到最多的优的数量。刚开始的思路是贪心,进行排序,a越小排在前面,a相同则c越小排在前面。然后加入答案是ans=n,每次取ai,time=time+ai,如果time大于t则取ci,然后ans--。
正解:sum=c1+c2+……+cn,然后把di=ai-ci排序,t-sum看可以去多少di,就是答案。也就是说ci是必须要花费的时间,至于是否取优,则贪心选取。
代码:
#include<set> #include<map> #include<list> #include<queue> #include<stack> #include<cmath> #include<vector> #include<cstdio> #include<stdlib.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; #define pb(a) push_back(a) #define mp(a,b) make_pair(a,b) #define in(a) scanf("%d",&a) #define mm(a,b) memset(a,b,sizeof(a)) #define out(a) printf("%d\n",a) #define MOD =1e9+7 #define ll long long #define INF 0x3f3f3f3f #define FOR(i,l,r) for(int i=l;i<=r;i++) int d[1005]; int n,sum; int main() { int t; scanf("%d",&t); while(t--) { scanf("%d",&n); sum=0; for(int i=0;i<n;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); sum+=c; d[i]=a-c; } int time; scanf("%d",&time); if(sum>time) { printf("Oh,my god!\n"); continue; } int ans=0; sort(d,d+n); for(int i=0;i<n;i++) { if(sum+d[i]<=time) { ans++; sum+=d[i]; } else break; } printf("%d\n",ans); } return 0; }
相关文章推荐
- php实习(四)
- c++ string split分割字符串
- Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
- 编程规范 --- 代码编辑、编译、审查
- MFC apps must not #include <windows.h>
- 在windows下安装scala出现错误:找不到或无法加载主类 scala.tools.nsc.MainGenericRunner
- 【算法学习】快包算法
- 牛腩新闻发布系统
- 子页面是iframe框架中 子页面改变父页面的值
- Mariadb
- hdu 2894 DeBruijin【Dfs】
- 一、百度Iot第一印象
- Java删除文件夹和文件
- java web开发中的路径问题
- GoLang 的 daemonize 实现
- TCP和UDP的区别(转)
- Boost xpressive 正则表达式
- SICP 习题1.36 使用不动点发寻找x^x = 1000的根
- mac和phy的关系(三)
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句