codeforces contest1082
C 维护前缀和
题意
每一个id给一个权值序列,从每个id选出数量相同的权值,对他们进行求和,使得他们的和最大
题解
注意负数对结果没有贡献,直接跳过。
当时写的比较挫,连排序都写错了!cf的编译器比较的严谨,虽然本地的编译器过了样例,但实际上是有问题的。结果就是交上去疯狂RE。
题解就直接看代码,比较的直观
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int n, m, k;
int a[maxn];
struct Node{
int id, val;
bool operator < (const Node &b) const{
if(id!=b.id) return id<b.id;
else return val>b.val;
}
}node[maxn];
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
int u, v;
for(int i=1; i<=n; i++){
cin>>node[i].id>>node[i].val;
}
sort(node+1, node+1+n);
int pre=-1;
int c;
int sum = 0;
int ans = -1e9-10;
for(int i=1; i<=n; i++){
if(node[i].id!=pre){
pre = node[i].id, c=0, sum = 0;
}
c++;
sum +=node[i].val;
if(sum>0) {
a[c]+=sum;
}
ans = max(ans, a[c]);
}
if(ans == -1e9-10) cout<<0<<endl;
else cout<<ans<<endl;
return 0;
}
D 构造题
题意
给n个点,每个点限制一个度数\(a_i\),你要构造一个无向图,使得每个点的度数不超过限制,并且最长链最长。
题解
度数大于等于2的点先构成一个最长链,然后度数为1的先加在两头(否则会使答案错误),之后的点在中间插就行了。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
const int inf = 0x3f3f3f3f;
const int maxn = 500+10;
int readint()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n, m;
int a[maxn];
vector<int> lone;
vector<int> two;
int main()
{
ios::sync_with_stdio(false);
cin>>n;
int tot = 0;
int one = 0;
int sum = 0;
int u, v;
for(int i=1; i<=n; i++) {
cin>>a[i];
if(a[i]>1) tot += 1, two.push_back(i);
else one+=1, lone.push_back(i);
sum += a[i];
}
if(sum<2*n-2){
cout<<"NO"<<endl;
return 0;
}
{
if(one>=2)
cout<<"YES "<<tot+1<<endl<<n-1<<endl;
else cout<<"YES "<<tot-1+one<<endl<<n-1<<endl;
for(int i=0; i<two.size(); i++){
if(i+1<two.size()){
u = two[i], v = two[i+1];
a[u]--, a[v]--;
cout<<u<<" "<<v<<endl;
}
}
int idx = 0;
if(lone.size()>=2){
u=lone[0], v=lone[1];
cout<<u<<" "<<two[0]<<endl;
a[two[0]]--;
cout<<v<<" "<<two[two.size()-1]<<endl;
a[two[two.size()-1]]--;
idx=2;
}
for(int i=0; i<two.size(); i++){
int ° = a[two[i]];
if(idx >= int(lone.size())) break;
for(int j=idx; j<min(int(lone.size()), deg+idx); j++){
cout<<lone[j]<<" "<<two[i]<<endl;
}
idx+=deg;
deg = 0;
}
}
return 0;
}
E Increasing Frequency--思维+贪心
题意
给一个长度为n的序列,并且确定一个数c。\(你可以任选一个区间[l, r], 对该区间+k,k可以为负数\),使得最后的n个数中,等于c的数字的个数最多。问最多有多少个这样的数?
题解
Let $ cnt(l,r,x) $ be a number of occurrences of number x in subsegment$ [l,r] $.
The given task is equivalent to choosing \([l,r]\) and value d, such that $ans=cnt(1,l−1,c)+cnt(l,r,d)+cnt(r+1,n,c) $is maximum possible. But with some transformations \(ans=cnt(1,n,c)+(cnt(l,r,d)−cnt(l,r,c))\), so we need to maximize \(cnt(l,r,d)−cnt(l,r,c)\).
代码的精髓就是求解maximize\(cnt(l, r, d)-cnt(l, r, c)\)
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<bitset>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
const int inf = 0x3f3f3f3f;
const int maxn = 5e5+10;
int readint()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int cnt[maxn];
int n, c;
int mi[maxn];
int main()
{
ios::sync_with_stdio(false);
cin>>n>>c;
int temp;
int ans = 0;
for(int i=1; i<=n; i++){
cin>>temp;
mi[temp] = min(mi[temp], cnt[temp]-cnt[c]);
cnt[temp]++;
ans = max(ans, cnt[temp]-cnt[c]-mi[temp]);
}
cout<<ans+cnt[c]<<endl;
return 0;
}
F trie+dp
G 最大密度子图
题意
给定一个无向图,给定边权和点权,选择若干的点,使得他们的边权和-点权和最大
题解
codeforces contest1082的更多相关文章
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
- CodeForces - 148D Bag of mice
http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...
随机推荐
- 03--STL序列容器(Deque)
一:Deque双端队列<头尾操作> stack和queue是在Deque的基础上改进的,所以先介绍双端队列Deque deque是“double-ended queue”的缩写,和 ...
- Java虚拟机—垃圾收集器(整理版)
1.概述 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾收集器都可能会有很 ...
- 使用lombok 注解Java类
环境信息: IDEA 2016.2.4 Maven 3 JDK 1.8 Maven工程配置: <properties> <lombok.version>1.16.16< ...
- String Byte 互转
string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转成string: ...
- C# NPOI 操作Excel 案例
1.加入NPOI 程序集,使用nuget添加程序集 2.引用NPOI程序集 private IWorkbook ExportExcel(PrintQuotationOrderViewModel mod ...
- iis7.5做反向代理配置方法实例图文教程
网络上好多开场的文章就说了好多的原理之类的这里我们直接开始配置.不过也要简单说下win下配置反向代理只有IIS7以上的版本才可以实现这个功能,在这里我们使用WINDOWS2008 R2来做为测试 20 ...
- 使用scrapy爬虫,爬取今日头条首页推荐新闻(scrapy+selenium+PhantomJS)
爬取今日头条https://www.toutiao.com/首页推荐的新闻,打开网址得到如下界面 查看源代码你会发现 全是js代码,说明今日头条的内容是通过js动态生成的. 用火狐浏览器F12查看得知 ...
- python安装过程中的一些问题
因为看到大神的教程是基于python V2.7,下载该版本且安装成功. 安装目录: https://www.python.org/download/releases/2.7/ 根据系统进行安装包下载 ...
- IE兼容事件绑定V1.0
想要兼容IE678,少用原型,因为它们没有完全实现ECMA-262规范 (function(window){ //兼容IE678时少用原型,因为它没有完全遵循ECMA-262规范 //衬垫代码:isA ...
- Springboot+Mybaits之两张表同时插入数据
项目需求是,一张表添加数据的同时,另外一张表也需要添加数据,话不多说,直接上代码. 1.Controller,我把两个DTO直接放到一个@RequestBody中.其中throws是后台获取当前时间抛 ...