cf思维题
1、B. Paranoid String
题意:操作一:01可以变成1,操作二:10可以变成0。给定一个串,判断字串经过若干次操作,能否长度变成1,统计数量。
思路:对01来说,1可以吃掉0,然后前边不是0的,又可以通过10变成0。所以,能否变成一,取决于最后两个字符是否相同。
2、C. Zero Path
题意:给定只包含-1,1的一个矩阵,问从矩阵左上角走到矩阵右下角,只能左走一步和右走一步,是否存在路径使得和为0。
思路: 利用dp求出来从左上到右下的最大和和最小和。观察发现,如果从同一点向下走一步和向右走一步,到达斜斜下方,那么结果相差可能为-2,0,2.所以矩阵能实现的结果的可能值是在min~max之间,和它俩奇偶性相同的数。
拓展:思考如何打印出来路径
3、C. Helping the Nature
题意:给定三种操作,op1:将[1,i]位置对应的数字都减1,op2:将[i,n]位置对应的数字都减1,op3:将所有的数字都加1。问最少需要多少步,能把给定序列变成一个全零序列。
思路:利用差分进行求解,举个具体例子然后结合代码进行分析。
cin >> n;
int ans = 0;
int cur;//代表第一位的终值
for(int i = 1; i <= n; i++){
cin >> x;
if(i == 1) {
pre = x;
cur = x;continue;
}
else if(pre - x > 0){
cur -= pre - x;//更新第一位的值
}
ans += abs(pre - x);//abs(pre - x), 求后边/qi 前边减多少
pre = x;
}
cout << ans + abs(cur) << endl;
4、D. Fake Plastic Trees
(一道很好的树上bfs)
题意:给一棵树,每个结点有一个合法区间范围,操作是,每次在树上选一条链和一个c,然后链上每个点都加上c。初始树上每个点的值都是零,求最少多少次操作能让每个点的区间范围都合法。
思路:树上bfs。每次根据叶子节点来推父亲节点。
const int N = 2e5 + 10;
int t, n, d[N];
int fa[N]; //记录父亲结点
int add[N]; //记录子节点的贡献和
int dn[N], up[N];
int ans;
int min(int a, int b){
if(a < b) return a;
return b;
}
void bfs(){
queue<int> q;
for(int i = 1; i <= n; i++){
if(d[i] == 0) q.push(i);
}
while(!q.empty()){
int u = q.front();
q.pop();
int f = fa[u];
int dnn = dn[u], upp = up[u];
if(add[u] < dnn) add[f] += upp, ans ++;
else add[f] += min(add[t], upp);
d[f] --;
if(!d[f]) q.push(f);
}
}
void solve(){
cin >> t;
while(t -- ){
cin >> n;
ans = 0;
memset(add, 0, sizeof add);
memset(d, 0, sizeof d);
fa[1] = 1;
for(int i = 2; i <= n; i++){
cin >> fa[i];
d[fa[i]] ++;
}
for(int i = 1; i <= n; i++) cin >> dn[i] >> up[i];
bfs();
cout << ans << endl;
}
}
5、C. awoo's Favorite Problem
题意:有两种操作,一种是把ab变成ba,一种是把bc变成cb。给定两个序列,判断能否经过若干次操作,把序列a变成序列b。
思路:set存储元素位置。记得交换!
string solve(){
for(int i = 0; i < lena; i ++) {
s[a[i] -'a'].insert(i);
}
for(int i = 0; i < lena; i++){
if(a[i] == b[i]) {
s[a[i] -'a'].erase(i);
continue;
}
if(a[i] == 'a' && b[i] == 'b'){
if(!s[1].size()) return "NO";
int posb = *s[1].begin();
int posc = *s[2].begin();
if(s[2].size() && posc < posb) return "NO";
s[0].erase(i);
s[1].erase(posb);
s[0].insert(posb);
swap(a[i], a[posb]);
continue;
}
if(a[i] == 'b' && b[i] == 'c'){
...
}
return "NO";
}
return "YES";
}
6、D. Guess The String
题意:交互题。有一个长度为n的字符串。给定两种询问方式,第一种是查询某个位置的字母是什么(最多26次),第二种是查询区间的不同字母的个数(最多6000次)。求字符串是啥。
思路:二分+思维。存下来每个元素最后出现的位置,从前往后遍历,查询(mid,i)和(mid,i - 1)中有多少个不同的字母,如果相同,就更新该字符出现的最后位置为i,否则就查询该位置的字符是啥,然后更新该字符最后出现的位置为i。
注意:第一,题目不是多组输入,这个点错了好多遍。第二,下标从1开始!第三,加上cout.flush之后速度会快一点,建议添加。
7、Map
利用向量关系去构造。
思路:
cf思维题的更多相关文章
- E. Magic Stones CF 思维题
E. Magic Stones time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- cf A. Inna and Pink Pony(思维题)
题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...
- CF思维联系–CodeForces-217C C. Formurosa(这题鸽了)
ACM思维题训练集合 The Bytelandian Institute for Biological Research (BIBR) is investigating the properties ...
- ACM思维题训练 Section A
题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...
- CF思维联系--CodeForces - 218C E - Ice Skating (并查集)
题目地址:24道CF的DIv2 CD题有兴趣可以做一下. ACM思维题训练集合 Bajtek is learning to skate on ice. He's a beginner, so his ...
- zoj 3778 Talented Chef(思维题)
题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...
- ZOJ 3829 贪心 思维题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...
- 洛谷P4643 [国家集训队]阿狸和桃子的游戏(思维题+贪心)
思维题,好题 把每条边的边权平分到这条边的两个顶点上,之后就是个sb贪心了 正确性证明: 如果一条边的两个顶点被一个人选了,一整条边的贡献就凑齐了 如果分别被两个人选了,一作差就抵消了,相当于谁都没有 ...
- C. Nice Garland Codeforces Round #535 (Div. 3) 思维题
C. Nice Garland time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记
PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...
随机推荐
- [转帖]Linux cache参数调优
https://zhuanlan.zhihu.com/p/136237953 缓存机制(cache)是保证Linux环境下对硬盘/flash操作效率的有效方式.cache建立在内存中,它缓存了硬盘/f ...
- [转帖]《Linux性能优化实战》笔记(23)—— 内核线程 CPU 利用率过高,perf 与 火焰图
在排查网络问题时,我们还经常碰到的一个问题,就是内核线程的 CPU 使用率很高.比如,在高并发的场景中,内核线程 ksoftirqd 的 CPU 使用率通常就会比较高.回顾一下前面学过的 CPU 和网 ...
- 华为云CCE Turbo:基于eBPF的用户自定义多粒度网络监控能力
本文分享自华为云社区<华为云CCE Turbo:基于eBPF的用户自定义多粒度网络监控能力>,作者: 云容器大未来. 基于eBPF的容器监控的兴起 容器具有极致弹性.标准运行时.易于部署等 ...
- mysql系列14---mysql数据库还原与备份
一.Liunx服务器下数据库定时备份 1.编写mysql在docker容器中备份的shell脚本: #!/bin/bash# 2020-11-15#docker启动的mysql备份mysql_use ...
- vim 从嫌弃到依赖(21)——跨文件搜索
之前介绍了vim中的搜索模式,使用正则表达式可以很方便的在一个文件中进行搜索.后续也介绍了如何使用 argsdo 命令在参数列表中进行替换操作.但是到目前为止还没有介绍如何在工程目录中进行搜索,而这个 ...
- .net5发布到Linux指南
目录 Aspnetcore api 服务发布指南 一. 搭建nginx服务器 下载安装gcc编译库 下载安装pcre正则表达式库 下载安装openssl安全加密库 下载安装zlib解压库 下载解压并编 ...
- python快速入门【五】---- 面向对象编程、python类
python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...
- 3.1 C++ STL 双向队列容器
双向队列容器(Deque)是C++ STL中的一种数据结构,是一种双端队列,允许在容器的两端进行快速插入和删除操作,可以看作是一种动态数组的扩展,支持随机访问,同时提供了高效的在队列头尾插入和删除元素 ...
- C#9中使用静态匿名函数
匿名函数是很早以前在C#编程语言中引入的.尽管匿名功能有很多好处,但它们并不便宜.避免不必要的分配很重要,这就是为什么在C#9中引入静态匿名函数的原因.在C#9中,lambda或匿名方法可以具有静态修 ...
- 有用的sql笔记(工作总结)
1.查询当前月(数字为0表示当前月份,1表示上个月,-1表示下个月,以此类推) SELECT DATE_FORMAT((CURDATE() - INTERVAL [数字] MONTH), '%Y-%m ...