列表

详情


NC19907. [CQOI2007]三角形TRI

描述

画一个等边三角形,把三边的中点连接起来,得到四个三角形,把它们称为T1,T2,T3,T4,如图1。
把前三个三角形也这样划分,得到12个更小的三角形:T11,T12,T13,T14,T21,T22,T23,T24,T31,T32,T33,T34,如图2。
把编号以1,2,3结尾的三角形又继续划分…最后得到的分形称为Sierpinski三角形。
   
如果B不包含A,且A的某一条完整的边是B的某条边的一部分,则我们说A靠在B的边上。
例如T12靠在T24和T4上,但不靠在T32上。给出Spierpinski三角形中的一个三角形,找出它靠着的所有三角形。

输入描述

输入仅一行,即三角形的编号,以T开头,后面有n个1到4的数字。仅最后一个数字可能为4。

输出描述

输出每行一个三角形编号,按字典序从小到大排列。

示例1

输入:

T312

输出:

T314
T34
T4

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 2ms, 内存消耗: 408K, 提交时间: 2023-01-02 21:59:25

#include <bits/stdc++.h>
using namespace std;
string s;
int main()
{
    cin >> s;
    string b = s.substr(0, s.size() - 1);
    if(s[s.size()-1]=='4')
    {
        cout<<b<<1<<'\n';
        cout<<b<<2<<'\n';
        cout<<b<<3<<'\n';
    }
    else
    {
        int len=s.size();
       for (int i = len - 1; i > 0 && i >= len - 3; i--) {
            if (s[i] == s[i + 1]) {
                len--;
                continue;
            }
            cout<<s.substr(0, i)<<'4'<< endl;
        }
    }
    
return 0;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 504K, 提交时间: 2021-06-22 16:41:27

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int i,n,V[5]={0};
    char R[55];
	scanf("%s",R+1),n=strlen(R+1);
	if(R[n]=='4')for(i=1;i<4;i++)R[n]=i+'0',printf("%s\n",R+1);
	else
	{
		for(i=n;i>=2;i--)
		{
			if(V[R[i]-'0'])continue;
			V[R[i]-'0']=1;
			R[i]='4',R[i+1]='\0';
			printf("%s\n",R+1);
		}
	}
    return 0;
}

Python3 解法, 执行用时: 42ms, 内存消耗: 4696K, 提交时间: 2022-03-27 14:49:25

ori = input()
l = list(ori[1:])

if l[-1] == "4":
    for i in range(1, 4):
        l[-1] = str(i)
        print("T" + "".join(l))
else:
    p = set()
    for i in range(len(l)):
        r = l[:len(l)-i]
        if r[-1] in p:
            continue
        p.add(r[-1])
        r[-1] = "4"
        print("T" + "".join(r))

pypy3 解法, 执行用时: 60ms, 内存消耗: 40092K, 提交时间: 2021-06-23 10:41:31

s = input()
if s[-1] == '4':
    for i in range(1, 4):
        print(s[: -1] + str(i))
else:
    vis = set()
    for i in range(len(s) - 1, 0, -1):
        if s[i] not in vis:
            vis.add(s[i])
            print(s[: i] + '4')

上一题