【codeforces】Round #604 (Div. 2)(A. B.)

2023-05-16

Codeforces Round #604 (Div. 2) : http://codeforces.com/contest/1265

目录

    • A. Beautiful String
      • 链接
      • 题意
      • 思路
      • AC代码
    • B. Beautiful Numbers
      • 链接
      • 题意
      • 思路
      • AC代码

A. Beautiful String

链接

http://codeforces.com/contest/1265/problem/A

题意

给你一个字符串,字符串种只包含 ‘a’, ‘b’, ‘c’, ‘?’ 四种字符,要求使用 ‘a’, ‘b’, ‘c’ 替换字符串种的 ‘?’ 使得字符串是一个 Beautiful String(字符串中没有连续的两个字符相同的)。

思路

  1. 遍历字符串,若当前字符 s[i]‘?’,先假设它是 ‘a’
    1. 如果当前字符的前面有字符 s[i-1] 并且与当前字符相等(s[i-1] == s[i]),那么再假设它是 ‘b’
    2. 如果后面有字符并且与当前字符相等,那么当前字符可能是 ‘b’ 也可能是 ‘c’,(因为不知道 1.1. 成不成立)需要在联合前面的字符判定,因为可能当前字符是 ‘b’1.1. 成立),所以假设当前字符是 ‘c’,再尝试判断与前面的字符是否相等,如果相等(说明 1.1. 不成立)改成 ‘b’,如果不相等,说明前后都不等,不用改了。
  2. 遍历的同时做合理性检查,如果当前字符不是第一个字符,检查当前字符是否与前一个字符相等,相等则返回 -1。

AC代码

#include <bits/stdc++.h>
using namespace std;

int main(int argc, char const *argv[])
{
	int t;
	cin>>t;
	string s;
	while(t--) {
		cin>>s;
		bool ans = 0;
		int n = s.size();
		for (int i = 0; i < n; ++i) {
			if(s[i] == '?') {
				s[i] = 'a';
				if(i > 0 && s[i-1] == s[i]) s[i] = 'b';
				if(i < n && s[i] == s[i+1]) s[i] = 'c';
				if(i > 0 && s[i-1] == s[i]) s[i] = 'b';
			}
			if(i != 0 && s[i-1] == s[i]) {
				ans = 1;
				break;
			}
		}
		if(ans) cout<<-1<<endl;
		else cout<<s<<endl;
	}
	return 0;
}

B. Beautiful Numbers

链接

http://codeforces.com/contest/1265/problem/B

题意

给你一个排列,问你 1... n 1...n 1...n 中哪几个数是 Beautiful Numbers(在排列中截取一段 [ l , r ] [l, r] [l,r],使得这一段是一个排列,排列 1... m 1...m 1...m 的最大数字 m m m 就是 Beautiful Numbers)。

输出一个字符串,如果第 i i i 个数是 Beautiful Numbers,那么第 i i i 个字符是 ‘1’,否则是 ‘0’

思路

双指针。

分析题目,可知 1 1 1 一定是 Beautiful Numbers

一个排列必然是需要 1 1 1 的,那么先找到 1 1 1 的位置,两个指针都指向 1 1 1 的位置。

对于每个数字都尝试是否是 Beautiful Numbers

具体地,从 1 1 1 的位置开始扩展,每次向左或向右扩展 1 1 1 位,向左还是向右扩展取决于左右两边数字的大小,直观上,先扩展小的数才有可能找到一个排列。记录每次所能得到的最大的连续数字,并当前数字相比较,如果相等,说明两个指针中间的这段就是一个排列,当前数字是 Beautiful Numbers

PS:在我的实现中记录目前是否得到这个数字的 flag[] 数组需要初始化到 n+1,因为之后是通过判断 flag[i] 是否是 0 0 0 来判断连续的,如果受上次计算的影响 flag[n+1] 也是 1 1 1,那么最后一次的最大连续数字将会变成 n + 1 n+1 n+1 所以一定要使得 flag[n+1] = 0。

AC代码

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200100;

int t, n, a[MAXN], flag[MAXN]; 

int main(int argc, char const *argv[])
{
	cin>>t;
	while(t--) {
		cin>>n;
		int p, q;
		for (int i = 1; i <= n; ++i) {
			cin>>a[i];
			if(a[i] == 1) p = q = i;
		}
		for (int i = 0; i <= n+1; ++i) flag[i] = 0;
		flag[1] = 1;
		string ans = "1";
		int cnt = 1;
		for (int i = 2; i <= n; ++i) {
			if(p == 1) q++;
			else if(q == n) p--;
			else a[p-1] < a[q+1] ? p-- : q++;
			flag[a[q]] = 1;
			flag[a[p]] = 1;
			while(flag[cnt]) cnt++;
			cnt--;
			if(cnt == i) ans += "1";
			else ans += "0";
		}
		cout<<ans<<endl;
	}
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【codeforces】Round #604 (Div. 2)(A. B.) 的相关文章

  • 我的网页作品(div+css)

    前段时间为一个育儿网站做了一个个人空间主页 xff0c 这可是我的处女座 呵呵 请点击查看 xff1a Files shiyangxt baobaoke rar
  • HTML5 section、article和div区别

    在HTML5中 xff0c 规定开发过程中更加注重语义化和代码的结构标准 当中section article和div是非常相似的东西 xff0c 许多人无法区分它们 当初我对于这三个标签也很迷茫 xff0c 觉得都没什么区别 xff0c 用
  • 完全可以用window.open()代替window.showModalDialog()的方法

    转 http www javaeye com topic 123995 有两个页面 一个是调用页面 main html 一个是被调用页面 modalWindow html main html click here
  • C. Doremy‘s IQ(二分/贪心)

    题目 题意 给定n个任务和艾米的智商q 艾米要按顺序处理这n个任务 每个任务有难度值a i 对于每个任务 艾米可以选择处理 也可以选择不处理 如果艾米当前的智商q大于等于任务a i 则艾米可以直接处理该任务 智商不受任何影响 如果艾米当前的
  • div点击事件 鼠标放上去显示小手

    div cursor pointer
  • 1800*D. Nested Segments(数组数组&&离散化)

    解析 按照右端点进行排序 这样某个区间包含的区间只能是在其前面的区间中 所以维护左端点 x 的出现次数 这样我们在查询某个区间 x y 的时候 只需要求 x y 之间包含多少个前面区间的 x 即可 前缀和 因为 前面区间的 y 显然小于当前
  • 1400*A. World Football Cup(模拟)

    Problem 19A Codeforces 解析 模拟 记录总得分 净胜球 进球数 坑点 其中注意净胜球是进球数的差 己方进球数 对手进球数 可以为负数 排序即可 include
  • codeforces Gym 101341 K Competitions

    Problem codeforces com gym 101341 problem K vjudge net contest 162325 problem K Meaning 有 n 场比赛 每一场有 开始时间 a 结束时间 b 价值 c
  • 1200*A. You‘re Given a String...(枚举)

    include
  • jQuery 查找文本并高亮

    让我们来看一下如何使用 jQuery 去查找或搜索一段文本并高亮它 我是 jQuery 的忠实粉丝 喜欢它简介的语法 接下来让我演示一个示例 仅使用一行 jQuery 代码便可把搜索字段进行高亮
  • Matlab 如何生成一个[a,b]范围内随机整数的2种方法【已经解决】

    如何使用MATLAB生成一个 a b 范围内的随机整数 比如 随机生成 9 13 范围内的一个 或多个 整数 首先感谢 slandarer的指正 现已经更改 round 为四舍五入取整 而非向上取整 方法1为一个较为不错的方法 方法1 ra
  • 【前后缀 + 推公式整理】 Codeforces Round #813 (Div. 2) D. Empty Graph

    题意 给定 n n n 个点的点权 a i a i ai 这 n
  • 鼠标移动实现标签自动切换

  • 1096C - Polygon for the Angle-几何-性质

    思路 根 据 几 何 性 质 正 多 边 形 所 有 三 个 点组成的 角 都 是最小角的倍数 然后根据内角公式 可以求出 正多边形 最小角为 多边形内角 n 2 然后 打表发现 180边形最小角为1 最大角 178 所以 只有 179无法
  • Codeforces ZeptoLab Code Rush 2015

    Codeforces ZeptoLab Code Rush 2015 比赛链接 http codeforces com contest 526 A King of Thieves time limit per test 1 second m
  • 1600*C. Slava and tanks(思维)

    解析 如果n为奇数 则偶数位为奇数位少 1 则先轰炸偶数位 再轰炸奇数位 再一次轰炸偶数位 如果n为偶数 则任意顺序 于是无论奇偶 全部按照 偶 奇 偶 轰炸 则总次数为 n n 2 下取整 include
  • jquery筛选器

    在Web应用程序中 大部分的客户端操作都是基于对象的操作 要操作对象就必须先获取对象 jQuery提供了强大的选择器让我们获取对象 我人为地将jQuery选择器分为两大部分 选择对象和筛选条件 选择对象表示要获取什么对象 筛选条件是对获取的
  • 简短的 mouseover 显示与隐藏层的办法

    简短的 mouseover 显示与隐藏层的办法 在制作 mouseover 和 mouseout 显示 隐藏层的时候 有时总会出现 mouseover 层里面的对象时 层消失的情况 这是因为mouseover 层内 对象时 会对前层产生两个
  • 1600*B. pSort(并查集)

    解析 并查集 将能够交换的位置相连 查看对应的位置能够交换 include
  • Codeforces 1475C. Ball in Berland(二元容斥)

    题目传送门 题意 一个班级有a个男生和b个女生 现在这个班级有k对男女愿意一起出席毕业典礼 这里注意k对男女中可能会有某个男生或女生出现在多个pair中 你从这k对中找出两对 使得这两对中的男生不相同 女生不相同 即一个男生或女生不可能在一

随机推荐