【做题笔记】CF1311A、B、C
或许以后会有D。
A (link)
题目大意:给定两个整数 \(a,b\) ,每次可以进行一下任意一个操作:
- \(a\) 加上任意一个正奇数
- \(b\) 减去任意一个正偶数
问是否可以通过若干次操作把 \(a\) 变成 \(b\)
考虑,对于一个比 \(b\) 小的 \(a\) ,若 \(b-a\) 是一个奇数,那么一定可以通过加上一个奇数使 \(a==b\) ;若差为偶数,则一定可以把 \(a\) 加上一个奇数再减去一个偶数使之满足条件。
\(a>b\) 同理。
#include <iostream>
#include <stdio.h>
using namespace std;
long long t, a, b;
int main()
{
scanf("%lld", &t);
while (t--)
{
scanf("%lld%lld", &a, &b);
if (a > b)
{
if ((a - b) % 2 == 0)
{
printf("1\n");
continue;
}
else
{
printf("2\n");
continue;
}
}
else if (a < b)
{
if ((b - a) % 2 != 0)
{
printf("1\n");
continue;
}
else
{
printf("2\n");
continue;
}
}
else
printf("0\n");
}
return 0;
}
B (link)
题目大意:给定一个长度为 \(n\) 的序列 \(a\) ,另外给定一个长度为 \(m\) 的序列 \(p\) ,您可以进行若干次操作,每次只能交换 \(a_{p_i}\) 和 \(a_{p_{i+1}}\) ,其中 \(i\ \in\ [1,m]\) 。问是否可以在若干次操作后使序列 \(a\) 单调递增。\(1\leq\ m,n,a_i\leq 100\)
注意到数据范围很小,而交换的方式又很像冒泡排序,所以考虑首先冒泡排序,然后用一个 \(s\) 数组记录每次交换的 \(i\) 是否在序列 \(p\) 中出现过,若没有,则直接判定为失败,立即结束;否则在最后输出 YES
即可。时间复杂度 \(\mathcal{O}(n^2)\)。需要注意冒泡排序循环变量的控制。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int t,n,m,a[101],p[101],s[10001];
int main()
{
scanf("%d",&t);
nzhtl1477:
while(t--)
{
memset(s,0,sizeof(s)); //清空 清空 清空 ! ! !
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=m;i++)
{
scanf("%d",&p[i]);
s[p[i]]++;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++)
{
if(a[j]>a[j+1])
{
if(s[j])
{
swap(a[j],a[j+1]);
// printf("a[%d] can swap with a[%d]\n",j,j+1);
}
else
{
printf("NO\n");
goto nzhtl1477;
}
}
}
}
printf("YES\n");
}
return 0;
}
C (link)
题目大意:
给定一个长度为 \(n\) 的字符串 \(s\),另给一个长度为 \(m\) 的序列 \(p\) ,要求遍历 \(s\) ,若此时遍历到 \(s_i\) ,且 \(i\) 存在于 \(p\) 中,则需要从头遍历 \(s\) 。问最后 \(a\) ~ \(z\) 这26个字符各出现了几遍。
请注意:
- 一开始的遍历也算一遍
- 若 \(p\) 序列中有重复的值则也要遍历。
思路:
设答案为 \(ans\) 数组,\(vis\) 数组记录 \(p\) 序列中每个数出现了多少次,\(vis\) 数组记录 \(s\) 中每个字母出现了多少次。
然后从头扫描 \(s\) ,假如当前下标在 \(p\) 中出现过,则更新所有字母的答案。具体请看代码:
#include <bits/stdc++.h>
using namespace std;
int n, m, t, p[200005],vis[200005];
char s[200005];
//注意数组不能开太大,否则会超时
int main()
{
cin >> t;
while (t--)
{
memset(vis,0,sizeof(vis));
map<char, int> ans;
map<char, int> pre;
//STL map更方便
cin >> n >> m;
cin >> s+1; //细节:这里输入“s+1”就会把整个字符串往前移动一维,这样 s 就从1开始了
for (int i = 1; i <= m; i++)
{
cin >> p[i];
vis[p[i]]++;
}
for (int i = 1; i <= n; i++)
{
ans[s[i]]++;
pre[s[i]]++;
if(vis[i])
for(int j=97;j<97+26;j++)
ans[char(j)] += vis[i]*pre[char(j)]; //当前答案为错误的次数乘上这个字母目前出现的次数
//这样可以做到不重不漏
}
for (int i = 97; i < 97 + 26; i++)
cout << ans[char(i)] << " ";
printf("\n");
}
return 0;
}
(未完)
【做题笔记】CF1311A、B、C的更多相关文章
- C语言程序设计做题笔记之C语言基础知识(下)
C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...
- C语言程序设计做题笔记之C语言基础知识(上)
C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...
- SDOI2017 R1做题笔记
SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30
- SDOI2014 R1做题笔记
SDOI2014 R1做题笔记 经过很久很久的时间,shzr又做完了SDOI2014一轮的题目. 但是我不想写做题笔记(
- SDOI2016 R1做题笔记
SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...
- LCT做题笔记
最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...
- java做题笔记
java做题笔记 1. 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序 ...
- SAM 做题笔记(各种技巧,持续更新,SA)
SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...
- PKUWC/SC 做题笔记
去年不知道干了些啥,什么省选/营题都没做. 现在赶应该还来得及(?) 「PKUWC2018」Minimax Done 2019.12.04 9:38:55 线段树合并船新玩法??? \(O(n^2)\ ...
- POI做题笔记
POI2011 Conspiracy (2-SAT) Description \(n\leq 5000\) Solution 发现可拆点然后使用2-SAT做,由于特殊的关系,可以证明每次只能交换两个集 ...
随机推荐
- 51Nod 1183 编辑距离 (字符串相似算法)
编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除 ...
- AMCL论文及源码解析--参数(持续更新中)
整理内容来自:http://wiki.ros.org/amcl 1.AMCL订阅的节点: scan (sensor_msgs/LaserScan):激光数据 tf (tf/tfMessage):各种转 ...
- Grammar Framework 1
Word is cheap, show me the grammar. Doc requirements:TODO 1. English doc 2. Mark the importance 语法框架 ...
- ALSA Lib-简单的播放例子
参考:https://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_8c-example.html #include <stdio.h&g ...
- Javascript的重要数据类型-对象
这次的分享,主要还是想跟大家聊聊Javascript语言中很重要的概念之一,对象.为什么说之一呢?因为Javascript其他重要概念还包括:作用域 作用域链 继承 闭包 函数 继承 数组 ..... ...
- Sql Server2008忘记sa登陆密码
Sql的sa登陆密码忘记解决方法: 语句执行的前提: 1.系统可以登陆进去(当不记得sa密码的时候,可以使用windows用户验证的方式进行登陆) 2.平时用sa登陆,点了记住密码但是不记得密码是多少 ...
- 5G三大应用场景
5G三大应用场景:eMBB(增强移动宽带).eMTC(海量物联).uRLLC(高可靠低时延连接) ------20191215闪
- npm 基础命令
npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装的包.npm 从5.2版开始,增加了 ...
- 搜索字母a或A
Amy觉得英语课实在是无聊至极,他不喜欢听老师讲课. 但是闲着也是闲着,不如做点什么吧?于是他开始数英语书里的字母a和A共出现了多少次. 费了九牛二虎之力终于数完了. 作为一名软件工程专业大学生,他觉 ...
- 洛谷P1308 统计单词数
原题链接:https://www.luogu.org/problem/P1308 #include<iostream> #include<cstring> #include&l ...