Codeforces Round #408 (Div. 2) 题解【ABCDE】
A - Buying A House
题意:给你n个房间,妹子住在第m个房间,你有k块钱,你想买一个离妹子最近的房间。其中相邻的房间之间距离为10,a[i]=0表示已经被别人买了。
题解:扫一遍更新答案即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
int mp[maxn];
int n,m,k;
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++){
scanf("%d",&mp[i]);
}
int Ans = 1000000;
for(int i=1;i<=n;i++){
if(mp[i]==0)continue;
if(mp[i]<=k){
Ans = min(Ans,abs(m-i)*10);
}
}
cout<<Ans<<endl;
}
B - Find The Bone
题意:有n个杯子,m个杯子下面是洞,然后会交换k次杯子。如果球已经在洞里面了,就不会被交换所影响。
题解:模拟即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
int mp[maxn];
int now = 1;
int n,m,k;
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++){
int x;scanf("%d",&x);
mp[x]=1;
}
int flag = 0;
for(int i=1;i<=k;i++){
if(mp[now])flag=1;
int x,y;
scanf("%d%d",&x,&y);
if(flag)continue;
if(now==x)now=y;
else if(now==y)now=x;
}
cout<<now<<endl;
}
C - Bank Hacking
题意:给你一棵树,如果砍掉一个点,会使得周围的点+1,间接相连(中间节点必须活着)的点+2。
现在给你每个点的权值,问你最少需要多少的战斗力,能够砍完这棵树。
题解:如果你砍A,那么与A相连的+1,其他的+2。所以你拿个multiset模拟一下就好了。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5+7;
vector<int> E[maxn];
int a[maxn],n;
multiset<int>S;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
S.insert(a[i]);
}
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
E[x].push_back(y);
E[y].push_back(x);
}
int Ans = 2e9;
for(int i=1;i<=n;i++){
int ans = a[i];
S.erase(S.find(a[i]));
for(int j=0;j<E[i].size();j++){
int v = E[i][j];
ans = max(ans,a[v]+1);
S.erase(S.find(a[v]));
}
if(S.size())ans = max(ans,*S.rbegin()+2);
Ans = min(Ans,ans);
S.insert(a[i]);
for(int j=0;j<E[i].size();j++){
int v = E[i][j];
S.insert(a[v]);
}
}
cout<<Ans<<endl;
}
D - Police Stations
题意:给你一棵树,让你删除最多的边,使得任意一个点,到关键点的距离都小于等于d。
题解:暴力bfs,把关键点都压进去跑最短路,然后把最短路径上的边保留下来就好了……
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e5+8;
int n,k,d;
vector<pair<int,int> >E[maxn];
int vis[maxn],D[maxn];
int main(){
memset(D,-1,sizeof(D));
scanf("%d%d%d",&n,&k,&d);
queue<int> Q;
for(int i=0;i<k;i++){
int x;
scanf("%d",&x);
D[x]=0;
Q.push(x);
}
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
E[x].push_back(make_pair(y,i));
E[y].push_back(make_pair(x,i));
}
int ans1 = n-1;
while(!Q.empty()){
int now = Q.front();
Q.pop();
if(D[now]==d)continue;
for(int i=0;i<E[now].size();i++){
pair<int,int> next = E[now][i];
if(D[next.first]!=-1)continue;
D[next.first] = D[now] + 1;
Q.push(next.first);
vis[next.second]=1;
ans1--;
}
}
cout<<ans1<<endl;
for(int i=1;i<n;i++){
if(!vis[i])cout<<i<<" ";
}
cout<<endl;
}
E - Exam Cheating
题意:你在考试,你可以抄左右人的答案,你只能抄p次,每次只能看连续的k道题。现在告诉你左右两个人知道哪些题,请问你最多抄对多少题。
题解:dp[x][re][len][type]表示考虑到x位置,当前剩下re次机会,匹配长度还剩下len,当前抄的人是type。然后用记忆化搜索转移即可。
你要么换个人抄,你要么就一直抄这个人。空间复杂度是1000100050*2,会稍微爆空间,所以用short就好了。
#include<bits/stdc++.h>
using namespace std;
int a[3][1001],s[3][1001];
short dp[1001][1001][51][2];
int n,p,k,r,x;
short solve(int x,int re,int len,int type){
if(x>n)return 0;
if(re==0){
return s[type][x+len-1]-s[type][x-1];
}
if(dp[x][re][len][type]!=-1)return dp[x][re][len][type];
short& ans = dp[x][re][len][type];
ans = 0;
int Len = min(k,n-x+1);
if(len == 0){
ans = solve(x+1,re,len,type);
// two choices
ans = max(ans,solve(x,re-1,Len,0));
ans = max(ans,solve(x,re-1,Len,1));
}else{
// continue
ans = max(ans,(short)(solve(x+1,re,len-1,type)+(short)a[type][x]));
// change type
ans = max(ans,(short)(solve(x+len,re-1,Len-len,1-type)+(short)(s[2][x+len-1]-s[2][x-1])));
}
return ans;
}
int main(){
memset(dp,-1,sizeof(dp));
scanf("%d%d%d",&n,&p,&k);
scanf("%d",&r);
for(int i=0;i<r;i++){
scanf("%d",&x);
a[0][x]=1;
}
scanf("%d",&r);
for(int i=0;i<r;i++){
scanf("%d",&x);
a[1][x]=1;
}
for(int i=1;i<=n;i++){
for(int j=0;j<2;j++)
s[j][i]+=a[j][i]+s[j][i-1];
s[2][i]+=s[2][i-1];
if(a[0][i]||a[1][i])
s[2][i]++;
}
cout<<solve(1,p,0,0)<<endl;
}
Codeforces Round #408 (Div. 2) 题解【ABCDE】的更多相关文章
- Codeforces Round #643 (Div. 2) 题解 (ABCDE)
目录 A. Sequence with Digits B. Young Explorers C. Count Triangles D. Game With Array E. Restorer Dist ...
- Codeforces Round #646 (Div. 2) 题解 (ABCDE)
目录 A. Odd Selection B. Subsequence Hate C. Game On Leaves D. Guess The Maximums E. Tree Shuffling ht ...
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #525 (Div. 2)题解
Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
随机推荐
- zabbix安装及简单配置
Zabbix基本介绍: zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.它能监视各种网络参数,保证服务器系统的安全运营:并提供柔软的通知机制以让系统管理员快 ...
- Android命令Monkey压力测试,详解
一.Monkey 是什么?Monkey 就是SDK中附带的一个工具. 二.Monkey 测试的目的?:该工具用于进行压力测试. 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出 ...
- 基于Golang设计一套微服务架构[转]
article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服 ...
- Android Studio gradle配置详解
android gradle配置详解 AppExtension类及其属性 可能大部分人看到AppExtension类会感觉到非常的陌生,其实我们在app中的build.gradle中填写配置信息的时候 ...
- OCM_第十八天课程:Section8 —》RAC 数据库 _ RAC DB 搭建/RAC DB 配置使用
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- 性能测试三十三:监控之Linux系统监控命令大全
1.top命令top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top - 01:06:48 up 1: ...
- python 全栈开发,Day43(引子,协程介绍,Greenlet模块,Gevent模块,Gevent之同步与异步)
昨日内容回顾 I/O模型,面试会问到I/O操作,不占用CPU.它内部有一个专门的处理I/O模块.print和写log 属于I/O操作,它不占用CPU 线程GIL保证一个进程中的多个线程在同一时刻只有一 ...
- for循环输出数组中的分数
示例 var scores = [24, 32, 17]; // A数组 var arrayLength = scores.length;// 数组的长度 //当i<arrayLength时,可 ...
- ***腾讯云直播(含微信小程序直播)研究资料汇总-原创
这段时间抽空研究了下直播技术,综合比较了下腾讯云直播的技术和文档方面最齐全,现把一些技术资料和文档归集如下: 1.微信小程序移动直播入门导读 https://cloud.tencent.com/doc ...
- NDK 开发实例一(Android.mk环境配置下)
在我写这篇文章的时候,Android Studio已经是2.3版本了,已经集成CMake 编译工具, 用户只需在 新建项目的时候,添加选项(Include C++ support),Andr ...