为了使自己的球技不断提高,罗贝托必须每天训练。他手上有N份训练计划,每份训练计划正好会占用他一天的时间。罗贝托从第一天开始训练,他可以任意安排这些训练的顺序, 第i份训练的能力提升为Pi,截止日期为Di。在截止日期后才完成的训练没有能力提升。请帮助罗贝托规划每天的训练,使他获得的能力值提升最大。Input
输入包含多组数据。 对于每组数据: 第一行: 单个整:N,1<=N<=10^5 第二行到第N+1行:第i+1行有两个整数:Di和Pi,1<=Di<=10^9, 1<=Pi<=10^9Output
对于每组数据,输出一行,一个整数,表示能获得的最大的能力值。Sample Input
3 2 10 1 5 1 7 10 2 99 5 29 4 82 8 72 3 86 8 24 3 69 7 44 3 79 2 19Sample Output
17 515
#include<cstdio>//因为结果很大,得用long long 我一直用int ,wa了十几次。。。。。吐血 #include<algorithm> #include<queue> using namespace std; #define MAX 100000+16 struct node { int d,p; }t[MAX]; bool cmp(const node &a,const node &b) { return a.d<b.d; } int main(void) { int n,i,front,k,ans; long long res; priority_queue<int>que; while(~scanf("%d",&n)) { front=0,res=0; for(i=0;i<n;i++) { scanf("%d%d",&t[i].d,&t[i].p); } sort(t,t+n,cmp); if(n==1) { printf("%d\n",t[0].p); continue; } front=n-1; for(k=front;k>=0;k--) { if(k-1>=0) { if(t[k].d==t[k-1].d) { que.push(t[k].p); } else { que.push(t[k].p); ans=t[k].d-t[k-1].d; while(ans&&!que.empty()) { res+=que.top(); que.pop(); ans--; } } } else { ans=t[0].d; que.push(t[0].p); while(ans&&!que.empty()) { res+=que.top(); que.pop(); ans--; } } } while(!que.empty()) que.pop(); printf("%lld\n",res); } return 0; }
Description
景观水道是江安一道非常靓丽的风景,一共有L mathons(这是Mathon发明的长度单位)长,每隔一mathon都有一颗银杏树即0, 1, 2, …, L都有一棵银杏树。Mathon非常喜欢景观水道, 时常会来景观水道走走。 昨晚成都狂风大作,大雨倾盆,据说景观水道不少区域里所有的树都被连根拔起。Mathon知道后感到非常伤心,他想知道这场大风过后还剩下多少银杏树,你能帮帮他么。Input
输入包含多组数据。第一行为测试数据的组数 T <=10 接下来有T组数据,每组数据的第一行为1<=L<=10000 和 1<=M<=100 ,L表示景观水道的长度,M表示区域的数目。 接下来的M行每行包含两个不同的整数0<=l<=r<=L表示区域的范围[l, r],不同的区域可能有重合的部分。Output
每组数据输出一行,输出大风过后景观水道还剩下多少银杏树。Sample Input
1 500 3 150 300 100 200 470 471Sample Output
298
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int main() { int T,s[20000+16],vis[20000+16],L,M,i,l,r; long long res=0; scanf("%d",&T); while(T--) { memset(vis,0,sizeof(vis)); memset(s,0,sizeof(s)); scanf("%d%d",&L,&M); for(i=0;i<M;i++) { scanf("%d%d",&l,&r); vis[l]++; vis[r+1]--; } res=0; s[0]=vis[0]; for(i=1;i<=L;i++) s[i]=s[i-1]+vis[i]; for(i=0;i<=L;i++) if(!s[i]) res++; printf("%lld\n",res); } }
1759

被折叠的 条评论
为什么被折叠?



