Codeforces 1213E Two Small Strings
中文题意
给个n,再给两个长度为2的字符串,要求构造一个长度为\(3n\)的字符串,a、b、c三个字母各n个,且构造出的字符串子串中不能出现给定的两个字符串。如果不存在这样的字符串,就输出NO
解题思路
首先生成a、b、c的6个全排列,然后,每种全排列以两种方式扩大n倍——举个例子,n为3时,对于acb,可以扩展成这两种:acbacbacb、aaacccbbb。然后依次检查这12种字符串是否有满足要求的,有就输出,没有就代表没有了(可以考虑字符串排列的内部以及扩展后字符串之间的边界)
(虚拟赛时想到第一种扩展方式,把自己卡了以后,想到第二种,又把自己卡了,愣是想不到两种都试试……)
源代码
#include<cstdio>
#include<stdlib.h>
#include<algorithm>
const int MAXN=3e5+5;
int n;
char mo[6][4]={"abc","acb","bac","bca","cab","cba"};
char input[2][3];
char s[MAXN];
void check()
{
for(int i=2;i<=n*3;i++)
{
if(s[i]==input[0][1]&&s[i-1]==input[0][0]||s[i]==input[1][1]&&s[i-1]==input[1][0]) return;
}
printf("YES\n%s",s+1);
exit(0);
}
int main()
{
scanf("%d%s%s",&n,input[0],input[1]);
for(int m=0;m<6;m++)
{
for(int i=1;i<=n;i++)//然后一个奇怪的地方,我之前提交的时候input数组开到[2][2],输入时显然溢出了,但是输入那里不报错,反而这个循环不会进入,就是i这个循环。m那个循环进来了,然后直接进入check函数。为什么嘞……留坑
{
s[(i-1)*3+1]=mo[m][0];
s[(i-1)*3+2]=mo[m][1];
s[(i-1)*3+3]=mo[m][2];
}
check();
for(int i=1;i<=n;i++)
{
s[i]=mo[m][0];
s[i+n]=mo[m][1];
s[i+n+n]=mo[m][2];
}
check();
}
puts("NO");
return 0;
}
本博客第一篇被打上构造标签的博文(真该打个标签叫智商)
Codeforces 1213E Two Small Strings的更多相关文章
- Codeforces 385B Bear and Strings
题目链接:Codeforces 385B Bear and Strings 记录下每一个bear的起始位置和终止位置,然后扫一遍记录下来的结构体数组,过程中用一个变量记录上一个扫过的位置,用来去重. ...
- Codeforces 482C Game with Strings(dp+概率)
题目链接:Codeforces 482C Game with Strings 题目大意:给定N个字符串,如今从中选定一个字符串为答案串,你不知道答案串是哪个.可是能够通过询问来确定, 每次询问一个位置 ...
- 【24.34%】【codeforces 560D】Equivalent Strings
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- CodeForces 682D Alyona and Strings (四维DP)
Alyona and Strings 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/D Description After re ...
- codeforces 518A. Vitaly and Strings
A. Vitaly and Strings time limit per test 1 second memory limit per test 256 megabytes input standar ...
- Codeforces 149 E. Martian Strings
正反两遍扩展KMP,维护公共长度为L时.出如今最左边和最右边的位置. . .. 然后枚举推断... E. Martian Strings time limit per test 2 seconds m ...
- Codeforces 985 F - Isomorphic Strings
F - Isomorphic Strings 思路:字符串hash 对于每一个字母单独hash 对于一段区间,求出每个字母的hash值,然后排序,如果能匹配上,就说明在这段区间存在字母间的一一映射 代 ...
- CodeForces - 616F:Expensive Strings (后缀自动机)
You are given n strings ti. Each string has cost ci. Let's define the function of string , where ps, ...
- Codeforces 923 D. Picking Strings
http://codeforces.com/contest/923/problem/D 题意: A-->BC , B-->AC , C-->AB , AAA-->empty 问 ...
随机推荐
- spring配置文件拆分策略及方法
一.拆分策略 如果一个开发人员负责一个模块,我们采用公用配置(包括数据源.事务等)+每个系统模块一个单独配置文件(包括Dao.Service.Web控制器)的形式 如果是按照分层进行的分工,我们采用公 ...
- LOJ526「LibreOJ β Round #4」子集
题目 算是比较裸的题吧. 首先我们把符合要求的\((i,j)\)建一条边,那么我们要求的就是最大团. 转化为补图的最小独立集. 然后我们来证明补图是一个二分图. \((u,v)\)有边\(\Leftr ...
- 版本控制器之SVN(二)
安装重启以后,在菜单栏找到TortoiseSVN程序 启动以后 点击: 填写相应的信息: 可以看到项目的相关信息 选中仓库,右键 > Browse Repository 进入如下界面: 可以打开 ...
- 小白基础Python重要的字符串详解String的内置方法
String的内置方法: st='hello world {name} is {age}' {} 特殊内容需要识别format print(st.count('1')) 统计元素个数 print ...
- sql server concat()函数
concat()函数 --用于将两个字符串连接起来,形成一个单一的字符串 --SELECT CONCAT('FIRST ', 'SECOND') as a;
- 干货分享!Oracle 的入门到精通 ~
Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上 ...
- freemarker的replace的使用
1.replace替换: <#assign name="sdfsfdsa\ndfsafs\n"> 例子:${name?replace("\n",&q ...
- Linux上安装postgres 10.5
由于接触了华为的elk大数据平台,里面封装的是postgres ,就想着安装一下,熟悉一下postgres数据. 安装包下载:https://www.postgresql.org/ftp/source ...
- js带有遮罩的弹窗
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- hadoop的价值在哪里
新霸哥注意到了在移动互联网时代,很多的传统的系统架构已经不能满足现有的业务需要了,在大数据时代,我们需要新的架构才能满足海量数据处理能力. 在实际的应用中数据增长非常的迅速,数据类型也变的丰富了,业务 ...