CF1384A Common Prefixes 题解
作者:互联网
蒟蒻的第二篇题解。
因为第一项没有前一项,所以可以尽管输出(坏笑)。 本来打算输出随机字符,但是后来为了方便,就干脆全部输出字符 a 。
本题要求输出的字符串前 \(a_i\) 项一模一样,所以只要下一项不一样就够了,同样为了方便,就干脆输出另一个字符( a 或 s )。
下下个字符是什么已经无所谓了,就紧跟着前一个字符。 如果是跟着上上个字符,那也是可以的。
尽管要求长度不超过 \(200\) ,但是题目保证 \(0 \leq a_i \leq 50\) ,所以完全可以少输出几个字符,比如我就输出了 \(54\) 个。
#include<iostream>
#include<ctime>
#include<cstdio>
#include<cstdlib>//头文件
#define LEN 54//省事,统一54,样样54,全部54!!!
using namespace std;
inline int read();//快读不解释
inline char differ(int c)//确保不同
{
if(c=='a')return 's';
return 'a';
}
char a[360][360]={0};
bool flag=0;//确保不会输出多余的换行,所以第一次输出不带换行,后面先输出换行在输出字符串
int main()
{
int i,j,k;
int T,t,n;
T=read();//T组数据
while(T--)
{
n=read();
for(i=1;i<=LEN;i++)a[0][i]='a';
if(flag==0)//特判换行
{
flag=1;
for(j=1;j<=LEN;j++)putchar(a[0][j]);
}
else
{
putchar('\n');
for(j=1;j<=LEN;j++)putchar(a[0][j]);
}
for(i=1;i<=n;i++)
{
t=read();
for(j=1;j<=t;j++)a[i][j]=a[i-1][j];//复制字符
char er=a[i][t+1]=differ(a[i-1][t+1]);
for(j=t+2;j<=LEN;j++)a[i][j]=er;//紧跟
putchar('\n');//因为这里不可能是第一次换行,所以一定需要换行
for(j=1;j<=LEN;j++)putchar(a[i][j]);
}
}
return 0;
}
inline int read()
{
int xx=0,yy=1;
char chch=getchar();
while(chch<'0'||chch>'9')
{
if(chch=='-')
yy=-1;
chch=getchar();
}
while(chch>='0'&&chch<='9')
{
xx=(xx<<1)+(xx<<3)+(chch^48);
chch=getchar();
}
return xx*yy;
}
标签:输出,字符,int,题解,chch,Prefixes,Common,54,include 来源: https://www.cnblogs.com/bxjz/p/CF1384A.html