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 问 ...
随机推荐
- CentOS7安装SVN1.9.12
检查卸载原有的svn svn --version # 检查是否原有svn yum remove svn # 卸载原有svn 安装依赖: apr-1.6.5 mkdir /opt/software/sv ...
- 【经典问题】maximum subset sum of vectors
AtCoder Beginner Contest 139 Task F Engines 题目大意 给定 $n$ 个二维向量,从中选出若干个,使得它们的和的模最大. 分析 这是一个经典问题,还有一种提法 ...
- Java 中的动态代理
一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“委托者” ...
- celery异步发送邮件
利用Django框架发送邮件的详细过程,在前两天的博客中有所记录,但是单纯的那样发邮件是有非常大的问题的,这就需要celery异步发送来解决 首先我们来看一下邮件发送的过程: Django网站先发送到 ...
- Spring防止Xss配置
web.xml配置 <!-- xss过滤器 --> <filter> <filter-name>XssFilter</filter-name> < ...
- python-redis缓存-pool
#连接池 import redis pool=redis.ConnectionPool(host='192.168.71.140', port=6379) r = redis.Redis(connec ...
- C# 如何判断指定文件是否正被其它程序使用
C# 如何判断指定文件是否正被其它程序使用 起因:项目中发现在操作文件时,系统经常抛出异常,表示文件正被其它程序占用. 需求:为了事先判断,以确认指定的文件是否正被其它程序使用,需要方法进行判断. 思 ...
- 最简单的方式实现rem布局
加上如下js,px转换成rem需要手动,计算方式:量的大小除以100,就等于rem,例如:量的设计稿元素宽度是120,那么就写成{width: 1.2rem},这样写有什么问题,待研究,也欢迎补充 & ...
- css--内凹圆角
<div class="box"></div> :root { --r: 2em; } .box { overflow: hidden; position: ...
- Slimvoice快速而小巧
这可行吗?绝对没问题.完全加载的最大页面只有230 KB.因为所有内容都被缓存和压缩,所以随后查看的每个页面只有大约6 KB,这比我见过的具有相同功能的SPA要小得多. Slimvoice快速而小巧, ...