【做题笔记】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做,由于特殊的关系,可以证明每次只能交换两个集 ...
随机推荐
- mybatis第二天01
MyBatis第二天01 1.高级结果映射 1.1根据视频案例,分析表之间的关系 数据模型分析 1. 明确每张表存储的信息 2. 明确每张表中关键字段(主键.外键.非空) 3. 明确数据库中表与表之间 ...
- 【Python】表白程序
程序链接:https://www.lanzous.com/i8xj5mh # 打包操作 # 安装pyinstaller # cmd输入 pip install pyinstaller # shift ...
- 用Navicat连接mysql报错:2003-Can't connect to MySql server on '10.100.0.109'(10039)
问题描述 在 window 系统上,用 Navicat 连接 Mysql 数据库,弹出以下提示 问题原因 Mysql 数据库未启动 解决方案:启动 Mysql 数据库 1.点击桌面左下角运行 cmd ...
- springboot整合websocket实现客户端与服务端通信
定义 WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议.此WebSocket API可在用户的浏览器和服务器之间进行双向通信.用户可以向服务器发送消息并接收事件驱 ...
- vue自定义日期选择,类似美团日期选择,日历控件,vue日历区间选择
一个日历的控件,基于vue的,可以日历区间选择,可用于酒店日历区间筛选,动手能力强,可以修改成小程序版本的,先上效果图 里面的颜色样式都是可以修改的 选择范围效果 话不多说,直接上干货,代码可以直接复 ...
- Centos7安装python3.6.5
安装python3.6.5,原来的python2.7.5并存 准备环境: 登录你的linux虚拟机或者云服务器,进入命令行界面如下图: 进入这样的窗口就是远程登录成功,我这里使用的是远程连接工具xsh ...
- 一、c++语言基础
1. 程序员的第一条代码"Hello,world!" #include <cstdio> //头文件,主要负责输入.输出 using namespace std;//C ...
- C语言--“.”与“->”有什么区别?
这虽然是个小问题,但有时候很容易让人迷惑,因为有的时候用混淆了,程序编译不通过. 下面说说我对它们的理解. 一般情况下用“.”,只需要声明一个结构体.格式是,结构体类型名+结构体名.然后用结构 ...
- 2.js将Date对象转换成“2018-05-10”字符串格式化的时间
//拼接0 $cms.joint0 = function(val) { if (val < 10) return "0"+val; return val; } //时间格式化 ...
- Postman:下载安装与基本介绍
1.下载: (1)官网APP: https://www.getpostman.com/ (即: https://app.getpostman.com/app/download/win64 ) (2)插 ...