湫湫系列故事——消灭兔子
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了湫湫系列故事——消灭兔子相关的知识,希望对你有一定的参考价值。
Problem Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏。 游戏规则很简单,用箭杀死免子即可。 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买。 假设每种箭只能使用一次,每只免子也只能被射一次,请计算要消灭地图上的所有兔子最少需要的QQ币。 Input 输入数据有多组,每组数据有四行; 第一行有两个整数N,M(1 <= N, M <= 100000),分别表示兔子的个数和箭的种类; 第二行有N个正整数,分别表示兔子的血量Bi(1 <= i <= N); 第三行有M个正整数,表示每把箭所能造成的伤害值Di(1 <= i <= M); 第四行有M个正整数,表示每把箭需要花费的QQ币Pi(1 <= i <= M)。 特别说明: 1、当箭的伤害值大于等于兔子的血量时,就能将兔子杀死; 2、血量Bi,箭的伤害值Di,箭的价格Pi,均小于等于100000。 Output 如果不能杀死所有兔子,请输出”No”,否则,请输出最少的QQ币数,每组输出一行。 Sample Input 3 3 1 2 3 2 3 4 1 2 3 3 4 1 2 3 1 2 3 4 1 2 3 1 Sample Output 6 4 Source 2013腾讯编程马拉松复赛第三场(3月31日) Recommend liuyiding | We have carefully selected several similar problems for you: 5634 5633 5632 5631 5630
多多少少有一点无语,等有机会了一定要问问 马化腾 这个后台数据是啥
1 #include<stdio.h> 2 #include<algorithm> 3 using namespace std; 4 struct arrow 5 { 6 __int64 d,p; 7 }; 8 bool cmp(__int64 a,__int64 b) 9 { 10 return a>b; 11 } 12 bool cmp1(arrow a,arrow b) // 按照 Q币的升序 排序 13 { 14 return a.p<b.p; 15 } 16 int main() 17 { 18 __int64 n,i,j,m,jishu,b[10011],count,num; 19 arrow a[100011]; 20 while(scanf("%I64d%I64d",&n,&m)!=EOF) 21 { 22 num=count=0; 23 for(i=0;i<n;i++) 24 scanf("%I64d",&b[i]); 25 for(i=0;i<m;i++) 26 scanf("%I64d",&a[i].d); 27 for(i=0;i<m;i++) 28 scanf("%I64d",&a[i].p); 29 sort(b,b+n,cmp); // 兔子的 血量 降序 30 sort(a,a+m,cmp1); //箭的 加个 升序 31 for(i=0,num=n;i<n;i++) //从最厉害的 兔子开始杀 32 { 33 for(j=0;j<m;j++) // 从最便宜的 箭 开始 一个一个试 34 { 35 if(a[j].d==-1) 36 continue; 37 if(a[j].d>=b[i]) //如果 箭的伤害 大于兔子的血量的话. 38 { 39 a[j].d=-1; //该 箭 失效 //这一句和下一句如果加上 就超时 如果不加上 就300ms......... 40 num--; 41 count=count+a[j].p; //计算 花费 42 break; 43 } 44 } 45 } 46 if(num==0) 47 printf("%I64d\n",count); 48 else 49 printf("No\n"); 50 } 51 }
以上是关于湫湫系列故事——消灭兔子的主要内容,如果未能解决你的问题,请参考以下文章
2017ecjtu-summer training # 9 HDU 4544