Codeforces Round #540 (Div. 3)

题目链接:https://codeforces.com/contest/1118

题目太多啦,解释题意都花很多时间...还有事情要做,就选一些题来写吧。

B. Tanya and Candies

题意:

在n个数中任意删去一个,如果这个数被删去后,剩余数的奇数和以及偶数和相等,那么就定义这个数为"好数"。现在问这n个数中有多少个“好数”。

题解:

预处理出奇数前缀和、偶数前缀和,删去一个数后所有的奇数位置和 就为前面的奇数和以及后面的偶数和。然后枚举+判断就行了。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+;
int n;
int a[N];
ll pre[N],sub[N];
int main(){
cin>>n;
for(int i=;i<=n;i++) scanf("%d",&a[i]);
ll sum1=,sum2=;
for(int i=;i<=n;i++){
pre[i]=pre[i-];
sub[i]=sub[i-];
if(i&) pre[i]+=a[i];
else sub[i]+=a[i];
}
sum1=pre[n];sum2=sub[n];
ll sum=sum1+sum2;
ll ans = ;
for(int i=;i<=n;i++){
ll now =;
if(i&){
now+=pre[i-];
now+=sum-sub[i-]-sum1;
}else{
now+=sub[i-];
now+=sum-pre[i-]-sum2;
}
if(now*==sum-a[i]) ans++;
}
cout<<ans;
return ;
}

D2. Coffee and Coursework (Hard Version)

题意:

给出n杯咖啡,每杯咖啡能增加工作量ai,同时给出m即最终需要的工作量。

每一天都可以喝咖啡来增加工作量,但是在同一天中,每多喝一杯咖啡,相应增加的工作量就会多减少1。

最后问最少需要多少天,才能够完成工作量。

题解:

很显然,天数越多,工作越有可能被完成。所以可以二分天数,然后在此基础上,贪心地喝咖啡,也就是说,这x天的第1杯咖啡,都是权值最大的那些;第2杯就是次大的那些...以此类推。

这个题感觉也不是很难,就是二分+判断可行性,具体见代码吧:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5+;
int n,m;
int a[N];
int check(int x){
int i;
ll sum=,cnt=;
for(i=;i<=n;i++){
sum+=a[i]-cnt;
if(i%x==) cnt++;
if(sum>=m) return true;
}
return false;
}
int main(){
cin>>n>>m;
for(int i=;i<=n;i++) scanf("%d",&a[i]);
sort(a+,a+n+);
reverse(a+,a+n+);
int l=,r=1e9+,mid;
while(l<r){
mid=l+r>>;
if(check(mid)) r=mid;
else l=mid+;
}
if(l==1e9+) cout<<-;
else cout<<l;
return ;
}

F1. Tree Cutting (Easy Version)

题意:

给出一颗树,其中有些点被染为颜色1,有些被染为颜色2,还有些没被染色,就是颜色0。现在要求删去一条边,使得树变为两个部分,并且满足每一部分中不同时存在1或者2颜色。

现在问有多少条边删去后,满足条件。

题解:

这个题也不是很难...维护每个结点的cnt1,cnt2,分别表示以它为根的子树中,1颜色和2颜色有多少。

如果满足一个结点,以它为根的子树中,包含了所有的1或者2颜色,并且不包含另外一种颜色,那么答案就加一。

一个dfs就搞定了。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5+;
int n,sum1,sum2;
int a[N],cnt1[N],cnt2[N];
vector <int> g[N];
int ans;
void dfs(int u,int fa){
if(a[u]==) cnt1[u]++;
if(a[u]==) cnt2[u]++;
for(auto v:g[u]){
if(v==fa) continue ;
dfs(v,u);
cnt1[u]+=cnt1[v];
cnt2[u]+=cnt2[v];
}
if(cnt1[u]==sum1 && !cnt2[u]) ans++;
if(!cnt1[u] && cnt2[u]==sum2) ans++;
}
int main(){
cin>>n;
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++){
if(a[i]==) sum1++;
if(a[i]==) sum2++;
}
for(int i=;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
dfs(,-);
cout<<ans;
return ;
}

Codeforces Round #540 (Div. 3) 部分题解的更多相关文章

  1. # Codeforces Round #529(Div.3)个人题解

    Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...

  2. Codeforces Round #557 (Div. 1) 简要题解

    Codeforces Round #557 (Div. 1) 简要题解 codeforces A. Hide and Seek 枚举起始位置\(a\),如果\(a\)未在序列中出现,则对答案有\(2\ ...

  3. Codeforces Round #538 (Div. 2) (A-E题解)

    Codeforces Round #538 (Div. 2) 题目链接:https://codeforces.com/contest/1114 A. Got Any Grapes? 题意: 有三个人, ...

  4. Codeforces Round #531 (Div. 3) ABCDEF题解

    Codeforces Round #531 (Div. 3) 题目总链接:https://codeforces.com/contest/1102 A. Integer Sequence Dividin ...

  5. Codeforces Round #527 (Div. 3) ABCDEF题解

    Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...

  6. Codeforces Round #499 (Div. 1)部分题解(B,C,D)

    Codeforces Round #499 (Div. 1) 这场本来想和同学一起打\(\rm virtual\ contest\)的,结果有事耽搁了,之后又陆陆续续写了些,就综合起来发一篇题解. B ...

  7. Codeforces Round #545 (Div. 1) 简要题解

    这里没有翻译 Codeforces Round #545 (Div. 1) T1 对于每行每列分别离散化,求出大于这个位置的数字的个数即可. # include <bits/stdc++.h&g ...

  8. Codeforces Round #624 (Div. 3)(题解)

    Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...

  9. Codeforces Round #821(Div.2) (A-C) 题解

    Codeforces Round #821(Div.2) (A-C) A.Consecutive Sum 大致题意 给定一组共 n 个数据 ,如果俩个数的下标在 mod k 意义下同余,则可以交换a[ ...

随机推荐

  1. 【转】网游服务器中的GUID(唯一标识码)实现-基于snowflake算法

    本文中的算法采用twitter的snowflake算法,具体请搜索介绍,原来是用Scala写的,因我项目需要,改写成C++语言,主要用于高效的生成唯一的ID, 核心算法就是毫秒级时间(41位)+机器I ...

  2. 解决jQuery不同版同时引用的冲突

    今天研发的同事在开发一个新jQuery插件时,遇到一个揪心的问题.平台以前使用的 jQuery版本是1.2.6,偶,天啊!这是古代的版本啊! 由于很多功能基于老版本,不能删除啊,同志们都懂的! 于是我 ...

  3. OpenMPI源码剖析3:try_kill_peers 和 ompi_rte_abort 函数

    接着上一篇的疑问,我们说道,会执行 try_kill_peers 函数,它的函数定义在 ompi_mpi_abort.c 下: // 这里注释也说到了,主要是杀死在同一个communicator的进程 ...

  4. 【shell 练习2】产生随机数的方法总结

    一.产生随机数 ()RANDOM 产生随机数 [root@localhost ~]# echo $RANDOM [root@localhost ~]# )) #想要生成八个随机数,随便加一个八位的数字 ...

  5. python函数中的位置参数、默认参数、关键字参数、可变参数区别

    一.位置参数 调用函数时根据函数定义的参数位置来传递参数. #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_d ...

  6. Python 再谈字符串

    字符串除了要用引号来创建之外,其他和元组一样,不能修改,如果要修改只能用切片或者拼接的方式. 其他的什么乱七八糟的运算符都一样 一些不同 capitalize()-将字符串的第一个字母大写 str1. ...

  7. DNS域名解析协议

    一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服 ...

  8. MVC4 DropDownList (二) — 省市联动

    1.添加省份和城市类 //省份 public class Province { public int Id { get; set; } public string Name { get; set; } ...

  9. 在Centos中,大容量,且读写频繁的目录

    1./根目录 2./usr目录 3./home目录 4./var目录 5./Swap目录     比较特殊,只要物理内存没使用完,就不会被启用 以上为鸟哥的linuxPDF中的学习心得

  10. 常见设备在linux中的文件名

    设备 linux中的文件名 IDE硬盘 /dev/hd[a-d] SATA/USB/SCSI/SAS /dev/sd[a-p] 软盘 /dev/fd[0-1] 打印机 25针:/dev/lp[0-2] ...