您的位置:首页 > 其它

Codeforces Round #321 B Kefa and Company

2015-09-23 20:08 393 查看
题意:给你n和d,n表示有几个人,d表示相差值,给出你每个人的价值和友谊值,让你求出在每个人之间相差不超过d的情况下,友谊值的最大值、

思路:模拟,依次向前找,找出一个那么便与之前我找过的友谊值的和值进行比较大小,最后输出最大值、之前写的结构体型似乎有问题、

因为在大数据的时候会超时,换成用容器就过了、48ms

AC代码:

#include<cstdio>
#include<cstring>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
struct node {
int x;
int y;
bool operator <(const node &a) const {
return x<a.x;
}
}p;
int n;
long long sum,sun,d;
int main()
{
while(scanf("%d %I64d",&n,&d)!=EOF){
vector<node> msq;
for(int i=0;i<n;i++){
scanf("%d %d",&p.x,&p.y);
msq.push_back(p);
}
sort(msq.begin(),msq.end());
int i=0; int j=0;
sun=sum=msq[0].y;
while(++i<n){
sun+=msq[i].y;
while(msq[i].x-msq[j].x>=d){
sun-=msq[j++].y;
}
if(sun>sum)
sum=sun;
}
if(sun>sum)
sum=sun;
printf("%I64d\n",sum);
void clear();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: