标签:
这是一个中文题,学长挂给学弟的,结果爆零了
题意:lzs种了n棵树,每棵树每天长高一定的高度。某一天,lzs想知道树长得怎么样了,你能求出那一天最高的树有多高吗?(就是粘贴的他的题目)
一个短的题目往往都是一个很有意思的题目
思路:把它按原始速度和原始的高度排序,速度优先级高;然后遍历寻找之后的有没有比第一个大的,有的话就把它加入到新的集合内,再从新的集合中一直遍历上一步,直到m次
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 111111 struct tree{ int a,b; void input(){ scanf("%d%d",&a,&b); } int get_height(int day){ return day*b+a; } }t[N]; bool cmp(tree x,tree y){ if(x.b==y.b) return x.a>y.a; return x.b>y.b; } struct node{ int pos ; int num; }q[N]; bool cmp2(node x,node y){ return x.num<y.num; } int n,m; int ans[N]; int main(){ while(scanf("%d%d",&n,&m)!=EOF){ for(int i=1;i<=n;i++){ t[i].input(); } sort(t+1,t+n+1,cmp); for(int i=1;i<=m;i++){ scanf("%d",&q[i].num); q[i].pos = i; } sort(q+1,q+1+m,cmp2); int day = n ; memset(ans,0,sizeof(ans)); for(int i=1;i<=m;i++){ int cnt = 1; for(int j=2;j<=day;j++){ if(t[j].get_height(q[i].num)>t[cnt].get_height(q[i].num)){ t[++cnt] = t[j]; } } ans[q[i].pos] = t[cnt].get_height(q[i].num); //printf("%d\n",cnt); day = cnt ; } for(int i=1;i<=m;i++){ printf("%d\n",ans[i]); } } }
版权声明:都是兄弟,请随意转载,请注明兄弟是谁
标签:
原文地址:http://blog.csdn.net/u013076044/article/details/46909861