zoukankan      html  css  js  c++  java
  • codeforces Educational Codeforces Round 55 (Rated for Div. 2) C题 C. Multi-Subject Competition

    这道题比赛时候没做出来,下来一看才发现是排序傻逼题。

    把每个偏好的人做成一个vector,从大到小排序,做一个前缀和。然后将每种人数做一个桶,在桶里装每种科目选择人数为i的时候分数总和。

    遍历每一维vector,把各个位置上面的vector加到sum数组中,最后sum数组里面挑出最大值。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll; 
    vector<int> vec[100010];//vector一定要声明类型
    ll sum[100010];
    bool cmp(int a,int b)
    {
    	return a>b;
    } 
    int main()
    {
    	int n,m;
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++)
    	{
    		int subject,score;
    		scanf("%d%d",&subject,&score);
    		vec[subject].push_back(score);
    	}
    	for(int i=1;i<=m;i++)
    	{
    		sort(vec[i].begin(),vec[i].end(),cmp);
    	}
    	int maxsize=0;
    	for(int i=1;i<=m;i++)
    	{
    		for(int j=1;j<vec[i].size();j++)
    		{
    			   vec[i][j]+=vec[i][j-1];
    		}
    		maxsize=max((int)vec[i].size(),maxsize);
    	}
    	ll res=0;
    	for(int i=1;i<=m;i++)
    	{
    		for(int j=0;j<vec[i].size();j++)
    		{
    		   if(vec[i][j]>0)
    			  sum[j+1]+=vec[i][j];
    		}
    	}
    	for(int i=1;i<=maxsize;i++)
    	{
    		//printf("%d ",sum[i]);
    		res=max(sum[i],res);
    	}
    	printf("%lld
    ",res);
    }
    

      

  • 相关阅读:
    IDEA去除代码重负导致的波浪黄线
    java代码里出现中文乱码怎么解决
    准备接入个人支付接口?看完这几款支付产品再做决定!
    个人网站选择支付宝api
    PayPay猪 文档中心
    如何让input的值根据select改变
    Visual Studio运行VC++
    腾讯视频转mp4
    重要网址
    ANSYS笔记本
  • 原文地址:https://www.cnblogs.com/lishengkangshidatiancai/p/10041607.html
Copyright © 2011-2022 走看看