C. Multi-Subject Competition 思维+前缀和+填表加减复杂度(复杂度计算错误)
题意: 给出n个学生 m类题目 每个人会做s[i]类的题 并且做这个题的能力为r[i] 组成一个竞赛队 要求可以选择一些题目 在竞赛队中 擅长每一个题目的
人数要均等 求max(sigma(r[i]))
思路:贪心思想 每类题目选k个学生 先对每一类学生的能力值排序 如果这k个学生的能力值大于0 就选上 一开始写的是类似扫描的思想 从k从1---max(擅长一类题目的学生) 然后把他们前k个相加
如果擅长其中一类题目的sum<=0或者没有k个学生擅长该类题目就忽略 这样在枚举的时候就会爆炸T O(n*m) 换一个想法 用填表的思想ans[i]表示选取i个学生时候的max(sigma(r[i])) 每次枚举一类 如果
前缀和sum大于0就把它填在适当的ans[i]中 这样复杂度就为O(nlogn+m)
此题注意扫描不行就换填表 以减少复杂度
AC:
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn=2e5+;
const int inf =0x3f3f3f3f;
vector<int>v[maxn];
vector<int>sum[maxn];
bool cmp(int x,int y){
return x>y;
}
int vis[maxn];
int ans[maxn];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
int a,b;
scanf("%d%d",&a,&b);
v[a].pb(b);
}
for(int i=;i<=m;i++){
sort(v[i].begin(),v[i].end(),cmp);
}
int ans1=;
int maxsize=;
for(int i=;i<=m;i++){
int sum=;
for(int j=;j<v[i].size();j++){
sum+=v[i][j];
if(sum>)ans[j]+=sum;
else break;
}
maxsize=max(maxsize,int(v[i].size()));
}
for(int i=;i<maxsize;i++)ans1=max(ans1,ans[i]);
cout<<ans1<<endl; }
T:
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn=2e5+;
const int inf =0x3f3f3f3f;
vector<int>v[maxn];
vector<int>sum[maxn];
bool cmp(int x,int y){
return x>y;
}
int vis[maxn];
int ans[maxn];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
int a,b;
scanf("%d%d",&a,&b);
v[a].pb(b);
}
for(int i=;i<=m;i++){
sort(v[i].begin(),v[i].end(),cmp);
}
int big=inf;
int maxsize=;
for(int i=;i<=m;i++){
int j;
for( j=;j<int(v[i].size());j++){
if(j>)
sum[i].pb(sum[i][j-]+v[i][j]);
else sum[i].pb(v[i][j]);
if(sum[i][j]<=){
break;
} }
/* if(j>0&&sum[i][j-1]>0){
sum[i].pb(-sum[i][j-1]);
}*/ maxsize=max(maxsize,int(sum[i].size()));
} int tmp=;
int ans=;
for(int i=;i<maxsize;i++){
tmp=;
for(int j=;j<=m;j++){
if(vis[j]||i>=int(sum[j].size()))continue;
if(sum[j][i]<=){
vis[j]=;
continue;
}
tmp+=sum[j][i];
}
ans=max(tmp,ans);
} /*for(int i=1;i<=m;i++){
int sum=0;
for(int j=0;j<v[i].size();j++){
sum+=v[i][j];
if(sum>=0)ans[j]+=sum;
else break;
}
maxsize=max(maxsize,int(v[i].size()));
}
int ans1=0;
for(int i=0;i<maxsize;i++)ans1=max(ans1,ans[i]);*/ cout<<ans<<endl; }
C. Multi-Subject Competition 思维+前缀和+填表加减复杂度(复杂度计算错误)的更多相关文章
- [JZOJ5280]膜法师题解--思维+前缀和
[JZOJ5280]膜法师题解--思维+前缀和 题目链接 暴 力 过 于
- Codeforces 1082C Multi-Subject Competition(前缀+思维)
题目链接:Multi-Subject Competition 题意:给定n名选手,每名选手都有唯一选择的科目si和对应的能力水平.并且给定科目数量为m.求选定若干个科目,并且每个科目参与选手数量相同的 ...
- Codeforces 776C - Molly's Chemicals(思维+前缀和)
题目大意:给出n个数(a1.....an),和一个数k,问有多少个区间的和等于k的幂 (1 ≤ n ≤ 10^5, 1 ≤ |k| ≤ 10, - 10^9 ≤ ai ≤ 10^9) 解题思路:首先, ...
- Codeforces_776_C_(思维)(前缀和)
C. Molly's Chemicals time limit per test 2.5 seconds memory limit per test 512 megabytes input stand ...
- 2019牛客多校训练第三场B.Crazy Binary String(思维+前缀和)
题目传送门 大致题意: 输入整数n(1<=n<=100000),再输入由n个0或1组成的字符串,求该字符串中满足1和0个数相等的最长子串.子序列. sample input: 801001 ...
- atcode E - guruguru(思维+前缀)
题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_c 题解:一道思维题.不容易想到类似区间求和具体看一下代码. #include <iostr ...
- CodeForces - 519D(思维+前缀和)
题意 https://vjudge.net/problem/CodeForces-519D 给定每个小写字母一个数值,给定一个只包含小写字母的字符串 s,求 s 的子串 t 个数,使 t满足: 首位字 ...
- Spotlights【思维+前缀和优化】
https://blog.csdn.net/mengxiang000000/article/details/53291883 原博客地址 http://codeforces.com/group/1 ...
- Educational Codeforces Round 102 (Rated for Div. 2) D. Program (思维,前缀和)
题意:给你一个只含\(+\)和\(-\)的字符串,给你一个数\(x\),\(x\)初始为\(0\),随着字符串的遍历会加一减一,现在有\(m\)个询问,每个询问给出一个区间\([l,r]\)表示将这个 ...
随机推荐
- Dynamics CRM教程:制作普通图表并放入仪表盘中
关注本人微信和易信公众号: 微软动态CRM专家罗勇,回复143或者20150325可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 我有个小需求,就是看我家特 ...
- BIM与GIS
BIM行业是建筑与IT结合而形成的一个新兴行业,既然能说是行业,说明它包含的内容非常丰富,懂一点和完全懂是两码事,就好像一滴水和一片大海的范围一样.现在国内有很多高校开设了BIM专业,并对口招收了学生 ...
- 常用Shell脚本命令(备忘)
此处纪录一些个人常用的Shell命令,留作复用 Linux 必备软件 Tmux 终端复用神器 zsh 无比强大Shell运行环境 oh my zsh 搭配zsh食用 uGet Linux下载工具 Do ...
- 部署 Prometheus Operator - 每天5分钟玩转 Docker 容器技术(179)
本节在实践时使用的是 Prometheus Operator 版本 v0.14.0.由于项目开发迭代速度很快,部署方法可能会更新,必要时请参考官方文档. 下载最新源码 git clone https: ...
- SQLServer之修改存储过程
修改存储过程注意事项 只能修改先前在 SQL Server 中通过执行 CREATE PROCEDURE 语句创建的过程. Transact-SQL 存储过程修改为 CLR 存储过程,反之亦然. AL ...
- Linux IO 模型
Linux 中主要有五种IO模式:阻塞IO, 非阻塞IO, IO 多路复用,信号驱动IO和异步IO; 如果从同步非同步,阻塞非阻塞角度来看,又可以分为:同步阻塞IO, 同步非阻塞IO,异步阻塞IO和异 ...
- Redhat安装Oracle 11g (转)
1.1 安装前准备 1.1.1 修改操作系统核心参数 在Root用户下执行以下步骤: 1.1.1.1 修改/etc/security/limits.conf文件 输入命令:vi /et ...
- win10 系统 wifi自动断开连接 wifi热点不稳定
我的系统的电脑是win10系统,笔记本 下载了一个wifi共享大师,但是wifi总是自动断,于是就找了找问题所在 在网上看了许多方案,大多数都是 在 电源管理 把[允许计算机关闭此设备以节 ...
- jquery datatable 实例操作
var dataTables = $(".table").dataTable({ data: d,//为ajax的值,没有直接用插件自带的请求数据方式,个人觉得data的方式好控制 ...
- day15-面向对象基础(二)
今天整理类的组合以及类的三大特性 1.类的组合 2.类的继承 3.类的封装 4.类的多态 开始今日份整理 1.类的组合 类与类之间,并不是独立的,很多的时候在正常使用的时候都是类与类之间互相调用,所以 ...