zoukankan      html  css  js  c++  java
  • Codeforces 580B: Kefa and Company(前缀和)

    http://codeforces.com/problemset/problem/580/B

    题意:Kefa有n个朋友,要和这n个朋友中的一些出去,这些朋友有一些钱,并且和Kefa有一定的友谊值,要求这些朋友间的贫富差距(拥有的钱的数量)小于d,要求Kefa邀请出来的朋友的友谊值和最大,并输出这个最大值。

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <limits.h>
    #include <map>
    #include <stack>
    #include <queue>
    #include <vector>
    #define ll long long
    #define ms(a) memset(a,0,sizeof(a))
    #define pi acos(-1.0)
    #define INF 0x3f3f3f3f
    const double E=exp(1);
    const int maxn=1e6+10;
    using namespace std;
    struct wzy
    {
    	ll friends,money;
    }p[maxn];
    ll sum[maxn];
    //按金钱数升序排序
    bool cmp(wzy u,wzy v)
    {
    	return u.money<v.money;
    }
    int main(int argc, char const *argv[])
    {
    	ios::sync_with_stdio(false);
    	int n,d;
    	cin>>n>>d;
    	for(int i=0;i<n;i++)
    		cin>>p[i].money>>p[i].friends;
    	sort(p,p+n,cmp);
    	ms(sum);
    	// sum数组记录到达第i个朋友的友谊值的总和
    	sum[0]=p[0].friends;
    	// 对ans赋初值
    	ll ans=p[0].friends;
    	int j=0;
    	for(int i=1;i<n;i++)
    	{
    		// 计算友谊值的前缀和
    		sum[i]=sum[i-1]+p[i].friends;
    		ans=max(ans,p[i].friends);
    		// 直到金钱相差大于等于d的时候,更新ans的值
    		while(p[i].money-p[j].money>=d)
    			j++;
    		ans=max(ans,sum[i]-sum[j-1]);
    	}
    	cout<<ans<<endl;
    	return 0;
    }
  • 相关阅读:
    web前端node.js常用命令
    常见的一部份面试题
    JavaScript基础语法
    表单属性、标签
    文字美化学习总结
    JS-实现横向手风琴
    Js-带进度条的轮播图
    canvas-八卦图和时钟实现
    JS-闭包练习
    JS-上下文练习
  • 原文地址:https://www.cnblogs.com/Friends-A/p/10324455.html
Copyright © 2011-2022 走看看