Codeforces Round #625 (Div. 2)
Contest Info
| Solved | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 4/6 | O | O | Ø | Ø |
- O 在比赛中通过
- Ø 赛后通过
- ! 尝试了但是失败了
- - 没有尝试
Solutions
C.Remove Adjacent
题意:
给定一个由小写字母组成的字符串,对于字符串中某个字符,假如它相邻的字符中存在其在字符集中的前一个字符,那么就可以将它移除,求这个字符串最多移除的字符数
思路:
贪心的选取当前能删除的最大的字符,为什么这样是对的呢?
我们消去的是最靠后的元素,它不会对之后的元素能否被消除造成影响(因为没有更靠后的元素)
假如你消除的不是最靠后的元素,就有可能会对之后的元素能否被消除造成影响,导致某些字符不能被消除,比如$abbcda$我先消除$c$会造成这里的$d$无法被消除
经过上面分析,显然这种贪心策略是最优的

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n, ans;
char s[110];
bool vis[110];
int main(){
scanf("%d%s", &n, s+1);
s[0] = s[n+1] = '0';
while(1){
int id = 0;
for(int i = 1; i <= n; i++){
if(vis[i]) continue;
int l = i-1, r = i+1;
while(vis[l]) l--;
while(vis[r]) r++;
char tmp = s[i] - 1;
if((s[l]==tmp||s[r]==tmp)&&s[i]>s[id])
id = i;
}
if(id) vis[id] = 1, ans++;
else break;
}
printf("%d", ans);
}
D.Navigation System
题意:
给定一个无向图和一条$s$到$t$的路线$<s,t>$,然后从$s$出发沿着这个路线走,每个点导航仪都会给出到终点$t$的最短路径,假如最短路的路径变化的话会重新导航,求在$<s,t>$这条路径上重新导航次数的最小值和最大值
思路:
这个题目是真的又臭又长,我还理解错了意思,看半天都没看懂代码。之前现场赛也是因为题目意思没理解清楚就栽了坑,还是要多注意
对于两点$u->v$的移动,很明显,最短路径变化有两种情况:
①$u->v$ 的时候 距离终点的距离没有$-1$
(比如说$u$距离终点$3$,那么$v$距离终点的距离应该为$2$,否则就会重新导航)
②$u->v$ 的时候 距离终点的距离$-1$ 但是有其他最短路径的选择
(比如说$u->v->$终点和$u->w>$终点,那么导航就会有可能由第二条变成第一条)
最小值只需要考虑①,最大值就需要①+②
所以只要反向建图,求出终点到其他点的最短路,然后再一一判断即可(求最短路的话$bfs$就够用了)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#define pb push_back
using namespace std;
const int maxn = 2e5+100;
int n, m, k, u, v, ans1, ans2, p[maxn], d[maxn];
int cnt, head[maxn];
vector<int> g[maxn];
struct edge{
int to, nxt;
}e[maxn];
void add(int u, int v){
e[++cnt].nxt = head[u], e[cnt].to = v;
head[u] = cnt;
}
void bfs(int t){
for(int i = 1; i <= n; i++) d[i] = -1;
queue<int> que;
d[t] = 0, que.push(t);
while(!que.empty()){
int u = que.front(); que.pop();
for(int i = head[u]; i; i = e[i].nxt){
int v = e[i].to;
if(d[v]<0)
d[v] = d[u] + 1, que.push(v);
}
}
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i++){
scanf("%d%d", &u, &v);
add(v, u), g[u].pb(v);
}
scanf("%d", &k);
for(int i = 1; i <= k; i++) scanf("%d", &p[i]);
bfs(p[k]);
for(int i = 1; i < k; i++){
int u = p[i], v = p[i+1];
if(d[v]!=d[u]-1) ans1++, ans2++;
else{
for(int i = 0; i < g[u].size(); i++){
int w = g[u][i];
if(d[w]==d[u]-1&&w!=v){
ans2++; break;
}
}
}
}
printf("%d %d", ans1, ans2); }
Refences:
https://codeforces.ml/blog/entry/74431#comment-585195
https://blog.csdn.net/Herr_Shiiiii/article/details/104635793
https://blog.csdn.net/JiangHxin/article/details/104607515/
https://www.cnblogs.com/starve/p/12398306.html
Codeforces Round #625 (Div. 2)的更多相关文章
- Codeforces Round #625 Div. 2 D E
D题:https://codeforces.com/contest/1321/problem/D 题意:题目给个有向图,然后给一段序列,我们要沿着这个序列走,问走的过程中当前点到t的最短路会重构多少次 ...
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) D. Navigation System(有向图,BFS,最短路)
题意: n 点 m 边有向图,给出行走路径,求行走途中到路径终点最短路变化次数的最小值和最大值 . 思路 : 逆向广搜,正向模拟. #include <bits/stdc++.h> usi ...
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent(字符串,贪心,枚举)
题意: 给你一个由小写字母组成的字符串,若串中两个相邻元素字典序中也相邻,移除较大字母,问最多能移除多少个字母. 思路: 从大到小依次枚举. Tips: 注意下标的处理. 以小消大: #include ...
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) B. Journey Planning(映射)
题意: 已知 n 所城市(从 1 至 n 编号)及其美丽值,选取一条旅行路线,满足路线中两两城市美丽值之差等于编号之差,求所有旅行路线中美丽值的最大值. 思路: 美丽值与编号作差,差值为键,映射累加 ...
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) A. Contest for Robots(数学)
题意: n 道题,2 个答题者,已知二者的做题情况,你是受贿裁判,可以给每题指定分值(≥1),求甲乙分数(甲>乙)相差最小时最大分值的最小值. 思路: 统计只有甲或乙做出的题目数. 加一取下整判 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
随机推荐
- 通过DNSLOG回显验证漏洞
通过DNSLOG回显验证漏洞 前言 实际渗透测试中,有些漏洞因为没有回显导致无法准确判断漏洞是否存在,可能导致渗透测试人员浪费大量精力在一个并不存在的漏洞上,因此为了验证一些无回显漏洞,可结合DNSl ...
- linux下的文件类型
在Linux中一切设备皆文件,首先来看一下Linux下的文件都有哪些分类,也就是文件类型 文件类型:普通文件(包括shell脚本,文档,音频,视频).目录文件.设备文件(又细分为字符设备文件和块设备文 ...
- 基于 MPI 的快速排序算法的实现
完整代码: #include <iostream> #include <cstdlib> #include <ctime> #include <algorit ...
- c++ 参数传递与返回值详解(reference)
pass by value or pass by reference? 我们知道,当函数在传递值的时候,会新建一个变量(没有名字)储存这个值 然后传递.降低程序运行的效率. 如果使用引用(refere ...
- Azure Key Valut 简介
Azure Key Vault(密钥库)是用于安全地存储和访问Secret的云服务,Secret是需要严格控制访问权限的内容,例如API密钥,密码,证书或加密密钥.Key Vault Service支 ...
- explain extended;show warnings
mysql> explain extended select count(*) from xuehao;+----+-------------+-------+------+---------- ...
- 20V,24V转5V,20V,24V转3.3V降压芯片,IC介绍
常用的20V和24V转5V,3.3V的LDO稳压和DC-DC降压芯片: PW6206系列是一款高精度,高输入电压,低静态电流,高速,低压降线性稳压器具有高纹波抑制.输入电压高达40V,负载电流高达10 ...
- django url别名和反向解析 命名空间
url别名和反向解析 我们平时写的url名字都是死的,如果项目过大,需要项目中某个文件名改动一下,那么改动起来就不是一般的麻烦了,所以我们就在定义的时候给url起一个别名,以后不管哪个文件中运用都是用 ...
- 如何配置 Slf4j
一,前言 日常开发中经常需要在控制台输出一些信息,如果这些东西不加管理,那么很容易就被输出信息淹没.幸好,我们有日志相关的库来帮助我们格式化控制台的输出. 这篇文章将介绍如何配置 Slf4j 及其具体 ...
- 手把手做一个基于vue-cli的组件库(上篇)
基于vue-cli4的ui组件库,先贴个最终效果吧,步骤有点多,准备分上下篇,上篇:如何做一个初步的组件.下篇:编写说明文档及页面优化.开工. GitHub源码地址:https://github.co ...