Codeforces 1082C Multi-Subject Competition(前缀+思维)

题目链接:Multi-Subject Competition

题意:给定n名选手,每名选手都有唯一选择的科目si和对应的能力水平。并且给定科目数量为m。求选定若干个科目,并且每个科目参与选手数量相同的情况下的最大能力水平。

题解:每位选手扔到对应的科目里面从1-m遍历科目,能力值排序下,维护下能力值和,大于0就给到当前位置人数答案加上该值,否则跳出(给负价值是没有意义的),最后遍历一遍人数对应的价值,拿最大的即可。

 1 #include <vector>
 2 #include <cstdio>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6
 7 const int N=1e5+10;
 8 int ans[N];
 9 vector <int> v[N];
10
11 int main(){
12     int n,m,s,r,mx=0;
13     scanf("%d%d",&n,&m);
14     for(int i=1;i<=n;i++){
15         scanf("%d%d",&s,&r);
16         v[s].push_back(r);
17     }
18     for(int i=1;i<=m;i++){
19         int sum=0,sz=v[i].size();
20         sort(v[i].begin(),v[i].end());
21         mx=max(mx,sz);
22         for(int j=sz-1;j>=0;j--){
23             sum+=v[i][j];
24             if(sum>=0) ans[sz-j]+=sum;
25             else break;
26         }
27     }
28     int res=0;
29     for(int i=1;i<=mx;i++) res=max(res,ans[i]);
30     printf("%d\n",res);
31     return 0;
32 }

原文地址:https://www.cnblogs.com/ehanla/p/10039827.html

时间: 2024-11-09 06:10:17

Codeforces 1082C Multi-Subject Competition(前缀+思维)的相关文章

Codeforces Round #423 (Div. 2) C 思维,并查集 或 线段树 D 树构造,水

Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction   思维,并查集 或 线段树 题意:一个字符串被删除了,但给出 n条信息,要还原出可能的字典序最小的字符串.信息有:字符串ti,ki个位置xi,表明原本的字符串在xi位置是以字符串ti开头的. tags:惨遭 fst,一开始把所有字符串都存下来,排序做的,结果爆内存了.. 方法1: 考虑并查集,对于字符串 ti,在位置xi,

Codeforces Round #143 (Div. 2) (ABCD 思维场)

题目连链接:http://codeforces.com/contest/231 A. Team time limit per test:2 seconds memory limit per test:256 megabytes One day three best friends Petya, Vasya and Tonya decided to form a team and take part in programming contests. Participants are usually

Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp

Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以当作 ( 可 ) . 问这个字符串有多少个子串是正确的括号串. tags:好考思维,想不到.. 预处理出每个字符向左向右最多可以匹配到哪里,再 O(n*n) 枚举所有区间,看是否符合条件. // C #include<bits/stdc++.h> using namespace std; #pra

Codeforces 490C Hacking Cypher【前缀模+后缀模+暴力】

C. Hacking Cypher time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Polycarpus participates in a competition for hacking into a new secure messenger. He's almost won. Having carefully studied

Codeforces 758C:Unfair Poll(思维+模拟)

http://codeforces.com/problemset/problem/758/C 题意:教室里有n列m排,老师上课点名从第一列第一排开始往后点,直到点到第一列第m排,就从第二列第一排开始点,当点完第n列的名之后,接着点第n-1列的名.以此类推,就是从列上来看的话:1,2,3,4,……,n,n-1,n-2,……,1 ,2,…….这样的顺序点名.老师上课总共点k次名,问该课堂最多可以点同一个同学多少次,最少可以点同一个同学多少次,点了位置为(x,y)的同学多少次名. 思路:一遇到这种题目

codeforces 938F(dp+高维前缀和)

题意: 给一个长度为n的字符串,定义$k=\floor{log_2 n}$ 一共k轮操作,第i次操作要删除当前字符串恰好长度为$2^{i-1}$的子串 问最后剩余的字符串字典序最小是多少? 分析: 首先很容易得到一个性质,那就是删除的那些串是可以不交叉的 很容易想到一个很简单的dp dp[i][j]表示考虑原串的前i位,删除状态为j的情况下字典序最小的字符串(注意dp里面保存的是个字符串) 那么很明显就是个O(n^3logn)的dp,无法通过 dp里是一个字符串这个东西是很浪费时间而且很不优美的

Codeforces 1137D - Cooperative Game - [交互题+思维题]

题目链接:https://codeforces.com/contest/1137/problem/D 题意: 交互题. 给定如下一个有向图: 现在十个人各有一枚棋子(编号 $0 \sim 9$),在不知道 $t,c$ 的值的情况下,他们同时从home出发,要最终到达flag处. 你只能选择移动哪几个人的棋子,但棋子移动到哪里由程序确定并给出. 题解: 看网上大佬一个神仙解法……看得我一愣一愣的…… 选定两颗棋子,第一颗每次都移动,第二颗隔一次移动一次.所以,进行了 $2t$ 次之后第二颗棋子刚好

Codeforces 997A Convert to Ones(思维)

https://codeforces.com/problemset/problem/997/A 题目大意: 给定一串0-1序列,定义两种操作: 操作一:选取一连续串倒置. 操作二:选取一连续串把进行01互换(取反). 并给出操作一和操作二的代价,分别为x和y. 操作到最后要把串变成只含1的串,问最小的操作代价. 假定连续0的段数是num,那么可以知道,每进行一次操作一,就可以减少一次操作二的次数. 因此就要考虑操作一和二的优先使用问题: 如果x<y   就优先倒置,把所有0块区间合成一个0块区间

Educational Codeforces Round 40 C. Matrix Walk( 思维)

Educational Codeforces Round 40 (Rated for Div. 2) C. Matrix Walk time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output There is a matrix A of size x?×?y filled with integers. For every , *A**i,?