其他分享
首页 > 其他分享> > CF1384A Common Prefixes 题解

CF1384A Common Prefixes 题解

作者:互联网

A. 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