codeforces contest1082

时间:2023-01-14 19:48:55

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 &deg = 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的更多相关文章

  1. python爬虫学习&lpar;5&rpar; —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  2. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  3. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  4. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  5. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  6. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  7. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  8. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  9. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

随机推荐

  1. Mac上MySQL忘记root密码且没有权限的处理办法&amp&semi;workbench的一些tips (转)

    忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...

  2. jsp上传图片实时显示

    jsp代码 <div class="form-group" id="caseIma"> <label class="control- ...

  3. UWP学习记录3-设计和UI之样式

    UWP学习记录3-设计和UI之样式 1.颜色 在系统的“设置”>“个性化”>“颜色”里,提供了主题色选择.选定主题色后,会根据颜色亮度的 HSB 值创建浅色和深色的主题色. 应用可使用阴影 ...

  4. &period;net下mysql存储过程返回自定义值&lpar;原创&rpar;

    ado.net方法 public static string ExecuteQueryProc(string sConnStr, string sSql, Hashtable args) { MySq ...

  5. Xshell&lowbar;Using X11 forwarding

    FROM:http://www.netsarang.com/tutorial/xshell/1018/Using_X11_forwarding The X11 forwarding feature i ...

  6. Oracle 9 - redo和undo

    1.redo redo 有在线redo日志和归档redo日志, 从Oracle 10g开始还新增加了flashback技术. 每个Oracle数据库至少有2个在线重做日志组,循环写. 只有INSERT ...

  7. 深入理解jQuery插件开发&lpar;转&rpar;

    如果你看到这篇文章,我确信你毫无疑问会认为jQuery是一个使用简便的库.jQuery可能使用起来很简单,但是它仍然有一些奇怪的地方,对它基本功能和概念不熟悉的人可能会难以掌握.但是不用担心,我下面已 ...

  8. YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间

    到这里,大概的YII开发已经基本可以,但是下面要将的所有课程,学完之后可以让你更爱YII.下面的教程是讲的MVC的M,model.数据,业务,代码的集中地区.所以开始之前,学学开发规范-路径别名-命名 ...

  9. Infragistics的介绍以及在ASP&period;net中使用的总结

    Infragistics系列控件是一套很好,很强大的控件,.感觉很好..现在自己做项目也用..却发现网上没有一套中文的教程,中文资料都很少..在这里就把自己的研究心得写下来... 首先安装,一步一步装 ...

  10. 64位WIN7&plus;oracle11g&plus;plsql

    64位WIN7+oracle11g+plsql安装 Posted on 2015-07-28 22:41 算命大师不算卦 阅读(27) 评论(0) 编辑 收藏 上部转自Oracle 11g R2 fo ...