580BKefa and Company
2016-07-22 09:28
302 查看
L - Kefa and Company
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
Kefa wants to celebrate his first big salary by going to restaurant. However, he needs company.
Kefa has n friends, each friend will agree to go to the restaurant if Kefa asks. Each friend is characterized by the amount of money he has and the friendship factor in respect to Kefa. The
parrot doesn't want any friend to feel poor compared to somebody else in the company (Kefa doesn't count). A friend feels poor if in the company there is someone who has at least d units of money
more than he does. Also, Kefa wants the total friendship factor of the members of the company to be maximum. Help him invite an optimal company!
Input
The first line of the input contains two space-separated integers, n and d (1 ≤ n ≤ 105,
)
— the number of Kefa's friends and the minimum difference between the amount of money in order to feel poor, respectively.
Next n lines contain the descriptions of Kefa's friends, the (i + 1)-th line contains the description of the i-th
friend of type mi, si (0 ≤ mi, si ≤ 109)
— the amount of money and the friendship factor, respectively.
Output
Print the maximum total friendship factir that can be reached.
Sample Input
Input
Output
Input
Output
Hint
In the first sample test the most profitable strategy is to form a company from only the second friend. At all other variants the total degree of friendship will be worse.
In the second sample test we can take all the friends.
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node{
__int64 m,s;
}num[100010];
bool cmp(node a,node b)
{
return a.m<b.m;
}
__int64 max(__int64 a,__int64 b)
{
if(a>b)
return a;
return b;
}
int main()
{
__int64 n,d,i,j,sum,ma;
while(~scanf("%I64d%I64d",&n,&d))
{
for(i=0;i<n;i++)
scanf("%I64d%I64d",&num[i].m,&num[i].s);
sort(num,num+n,cmp);
ma=0;
sum=0;
i=0;
j=0;
while(j<n&&i<n)
{
if(num[j].m-num[i].m>=d)
{
sum-=num[i].s;
i++;
}
else
{
sum+=num[j].s;
j++;
}
ma=max(sum,ma);
}
ma=max(ma,sum);
printf("%I64d\n",ma);
}
return 0;
}
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
Kefa wants to celebrate his first big salary by going to restaurant. However, he needs company.
Kefa has n friends, each friend will agree to go to the restaurant if Kefa asks. Each friend is characterized by the amount of money he has and the friendship factor in respect to Kefa. The
parrot doesn't want any friend to feel poor compared to somebody else in the company (Kefa doesn't count). A friend feels poor if in the company there is someone who has at least d units of money
more than he does. Also, Kefa wants the total friendship factor of the members of the company to be maximum. Help him invite an optimal company!
Input
The first line of the input contains two space-separated integers, n and d (1 ≤ n ≤ 105,
)
— the number of Kefa's friends and the minimum difference between the amount of money in order to feel poor, respectively.
Next n lines contain the descriptions of Kefa's friends, the (i + 1)-th line contains the description of the i-th
friend of type mi, si (0 ≤ mi, si ≤ 109)
— the amount of money and the friendship factor, respectively.
Output
Print the maximum total friendship factir that can be reached.
Sample Input
Input
4 5 75 5 0 100 150 20 75 1
Output
100
Input
5 1000 7
11 32
99 10
46 8
87 54
Output
111
Hint
In the first sample test the most profitable strategy is to form a company from only the second friend. At all other variants the total degree of friendship will be worse.
In the second sample test we can take all the friends.
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node{
__int64 m,s;
}num[100010];
bool cmp(node a,node b)
{
return a.m<b.m;
}
__int64 max(__int64 a,__int64 b)
{
if(a>b)
return a;
return b;
}
int main()
{
__int64 n,d,i,j,sum,ma;
while(~scanf("%I64d%I64d",&n,&d))
{
for(i=0;i<n;i++)
scanf("%I64d%I64d",&num[i].m,&num[i].s);
sort(num,num+n,cmp);
ma=0;
sum=0;
i=0;
j=0;
while(j<n&&i<n)
{
if(num[j].m-num[i].m>=d)
{
sum-=num[i].s;
i++;
}
else
{
sum+=num[j].s;
j++;
}
ma=max(sum,ma);
}
ma=max(ma,sum);
printf("%I64d\n",ma);
}
return 0;
}
相关文章推荐
- 再谈SVM
- spark快速入门与WordCount程序机制深度解析 spark研习第二季
- confluent 版本比较 3.0.0 vs 2.0.0
- textView下划线
- [shell基础]——join命令
- 本地rpm镜像仓库
- Node.js:模块
- day2 HDU 2199 Can you solve this equation?
- SQL逻辑查询语句执行顺序
- [李景山php]thinkphp核心源码注释|File.class.php
- Tricky Sum
- nagios监控客户端报错/usr/bin/perl^M: bad interpreter: No such file or directory
- as自写插件及butterknife
- [李景山php]thinkphp核心源码注释|Eaccelerator.class.php
- 【数字信号处理】极其精简的平均滤波算法
- HDU1326
- JAVA结构型模式
- Android ImageView设置边框
- nagios监控客户端报错/usr/bin/perl^M: bad interpreter: No such file or directory
- Java框架介绍-13个不容错过的框架项目