Loading

BZOJ1258 三角形tri

三角形tri

找规律神题……

发现如果以4结尾,把4改成1、2、3输出就行了。

如果不以4结尾:

把结尾改成4输出即可,因为一定与三角形的中心相邻。

规律1:如果把串的末尾删去,那么会回到上一层。

如果这个串里只有1种数字,那么它一定在某个角上,只和自己这层的4相邻。

如果这个串里有2种数字,那么他在某条边上,和某层的4相邻,和自己的中心相邻。

如果这个串里有3中数字,那么它在大三角形里面,和这层的4,某层的4,另一层的4都相邻。

于是

规律2:这个串内有几种不同的数字,就和几个三角形相邻,并且一定以4结尾。

这还不够,接着找……

规律3:从后往前扫,第一次出现的数字前的子串+4是个答案不要问我怎么搞出这个规律的

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=55;
char s[N];
int n;
bool appear[4];
int main()
{
	scanf("%s",s);
	n=strlen(s)-1;
	if(s[n]=='4')
	{
		for(int i=0;i<n;++i)printf("%c",s[i]);puts("1");
		for(int i=0;i<n;++i)printf("%c",s[i]);puts("2");
		for(int i=0;i<n;++i)printf("%c",s[i]);puts("3");
		return 0;
	}
	for(int i=n;i>=1;--i)
	{
		int tmp=s[i]-'0';
		if(!appear[tmp])
		{
			for(int j=0;j<i;++j)printf("%c",s[j]);puts("4");
			appear[tmp]=true;
		}
	}
	return 0;
} 
posted @ 2020-02-23 16:59  zzctommy  阅读(162)  评论(0编辑  收藏  举报