或许以后会有D。


A (link)

题目大意:给定两个整数 \(a,b\) ,每次可以进行一下任意一个操作:

  1. \(a\) 加上任意一个正奇数
  2. \(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的更多相关文章

  1. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

  2. C语言程序设计做题笔记之C语言基础知识(上)

    C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...

  3. SDOI2017 R1做题笔记

    SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30

  4. SDOI2014 R1做题笔记

    SDOI2014 R1做题笔记 经过很久很久的时间,shzr又做完了SDOI2014一轮的题目. 但是我不想写做题笔记(

  5. SDOI2016 R1做题笔记

    SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...

  6. LCT做题笔记

    最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...

  7. java做题笔记

    java做题笔记 1. 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序 ...

  8. SAM 做题笔记(各种技巧,持续更新,SA)

    SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...

  9. PKUWC/SC 做题笔记

    去年不知道干了些啥,什么省选/营题都没做. 现在赶应该还来得及(?) 「PKUWC2018」Minimax Done 2019.12.04 9:38:55 线段树合并船新玩法??? \(O(n^2)\ ...

  10. POI做题笔记

    POI2011 Conspiracy (2-SAT) Description \(n\leq 5000\) Solution 发现可拆点然后使用2-SAT做,由于特殊的关系,可以证明每次只能交换两个集 ...

随机推荐

  1. win10中安装与配置maven

    原文链接:https://www.cnblogs.com/wkrbky/p/6350334.html Maven安装配置(Windows10) 想要安装 Apache Maven 在Windows 系 ...

  2. 论文阅读笔记(十三)【arxiv2018】:Revisiting Temporal Modeling for Video-based Person ReID

    Introduction (1)Motivation: 当前的一些video-based reid方法在特征提取.损失函数方面不统一,无法客观比较效果.本文作者将特征提取和损失函数固定,对当前较新的4 ...

  3. Charles抓包问题

    Charles抓包问题 抓包失败解决方法之一:在proxy下的Recording Setting找到解决方法 找到里面的include 把勾去掉,点击OK,然后就恢复正常可以抓包了.

  4. SQLServer 数据库索引碎片

    --改成当前库 use DB_Name --创建变量 指定要查看的表 declare @table_id int set @table_id=object_id('TableName') --执行 d ...

  5. threadpool 实例介绍第二篇

  6. JS首字母进行分类合并加排序

    let array = ['fds', 'ewfg1', 'cvd', 'ew', 'qer', 'jjh', 'rth', 'asd', 'vsd', 'tteh', 'fxv']; let map ...

  7. JavaScript-事件处理程序

    DOM事件流: 1.事件冒泡 2.事件捕获 DOM2事件流: 1.事件捕获阶段 2.处于目标阶段 3.事件冒泡阶段 DOM3事件 事件处理程序: 1.HTML事件处理程序: 例一:<input ...

  8. A函数跨区域

    ODerController.class.php内容如下 1 <?php /* * To change this license header, choose License Headers i ...

  9. Git分支规范说明

    1.分支类型说明 分支名称 分支描述 唯一 权限管理 release 发布分支,内部分支,当确定需要发布版本时,从develop分支拉出此分支 唯一 最高权限,由版本经理或者团队核心成员组管理 mas ...

  10. R语言函数化学习笔记3

    R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...