Problem:


M: 文字列集合

問題文

以下の条件を満たす文字列集合 $S$ のうち、要素数が最大となるものを $1$ つ構成してください。

$S$ に含まれる文字列の長さは $1$ 以上 $N$ 以下である。

$S$ に含まれる文字列の長さはそれぞれ異なる。

$S$ に含まれる文字列は、文字 0, 1 のみからなる。

$S$ に含まれるどの $2$ つの文字列についても、一方がもう一方の部分文字列とならない。

ただし、文字列 $x$ の部分文字列とは、 $x$ の先頭と末尾から $0$ 文字以上の文字を取り除くことで得られる文字列のことを言います。

制約

$1 \leq N \leq 300$

$N$ は整数である

入力

入力は以下の形式で標準入力から与えられる。

$N$

出力

条件を満たす文字列集合 $S$ のうち、要素数が最大となるものを $1$ つ出力せよ。このような $S$ は複数存在する可能性があるが、どれを出力しても正答となる。

具体的には、以下の形式で出力せよ。

$1$ 行目に $S$ の要素数 $K$ を出力せよ。

$2$ 行目から $K+1$ 行目に $S$ の要素をすべて出力せよ。各行には $S$ の要素を $1$ つ出力せよ。

$K$
$S_1$
$S_2$
$\vdots$
$S_K$

入力例1

2

出力例1

2
0
11

文字列集合 $\{0, 11\}$ は、条件を満たす集合の中で要素数が最大となるものです。

入力例2

1

出力例2

1
0



Sample input:
2


Sample output:
2
0
11

Submission status: Accepted

Solution code:
n=input()

if n==1:
	print "1\n0"
elif n==2:
	print "2\n0\n11"
else:
	print n-1
	for i in xrange(n-1):
		print "1"+("0"*i)+"1"

Submission status: Accepted

Solution code:
n = int(input())
if n == 1:
    print(1)
    print(0)
elif n == 2:
    print(2)
    print(0)
    print(11)
else:
    print(n-1)
    for i in range(n-1):
        print("1" + "0" * i + "1")

Submission status: Accepted

Solution code:
N = int(input())
K = N-1
if N == 2:
    print(2)
    print("00")
    print("1")
if N == 1:
    print(1)
    print(1)
else:
    print(K)
    for i in range(K):
        print("1"+"0"*i+"1")

Submission status: Accepted

Solution code:
n = int(input())
if n < 3:
    c = [0,[0],[0,11]][n]
else:
    c = list()
    for i in range(n-1):
        f = '1' + '0'*i + '1'
        c.append(f)
print(len(c))
print(*c, sep = '\n')

Submission status: Accepted

Solution code:
N = int(input())

A = []

for i in range(0,N-1):
    A.append("1"+"0"*i+"1")

if N==1:
    A=["1"]
if N==2:
    A=["0","11"]
print(len(A))
for a in A:print(a)

Submission status: Accepted

Solution code:
N = int(input())
if N==1:
    print(1)
    print(0)
elif N==2:
    print(2)
    print(0)
    print(11)
else:
    print(N-1)
    for i in range(N-1):
        print('0' + '1'*i + '0')

Submission status: Accepted

Solution code:
from heapq import *
from collections import deque
import sys

sys.setrecursionlimit(10 ** 6)
int1 = lambda x: int(x) - 1
p2D = lambda x: print(*x, sep="\n")
def II(): return int(sys.stdin.readline())
def MI(): return map(int, sys.stdin.readline().split())
def LI(): return list(map(int, sys.stdin.readline().split()))
def LLI(rows_number): return [LI() for _ in range(rows_number)]
def SI(): return sys.stdin.readline()[:-1]

class Dice:
    def __init__(self,top,bot,lef,rig,fro,bac):
        self.top = top
        self.bot = bot
        self.lef = lef
        self.rig = rig
        self.fro = fro
        self.bac = bac

    def up(self):
        top, bac, bot, fro = self.fro, self.top, self.bac, self.bot
        return Dice(top,bot,self.lef,self.rig,fro,bac)

    def down(self):
        top, bac, bot, fro = self.bac, self.bot, self.fro, self.top
        return Dice(top,bot,self.lef,self.rig,fro,bac)

    def right(self):
        top, rig, bot, lef = self.lef, self.top, self.rig, self.bot
        return Dice(top,bot,lef,rig,self.fro,self.bac)

    def left(self):
        top, rig, bot, lef = self.rig, self.bot, self.lef, self.top
        return Dice(top,bot,lef,rig,self.fro,self.bac)

    def state(self):
        return (self.top, self.rig, self.bot, self.lef, self.fro, self.bac)

def main():
    n=int(input())
    if n==1:
        print(1)
        print(1)
        exit()
    if n==2:
        print(2)
        print(0)
        print(11)
        exit()
    print(n-1)
    for i in range(n-1):
        print("1"+"0"*i+"1")

main()

Submission status: Accepted

Solution code:
import sys
input = sys.stdin.readline
sys.setrecursionlimit(1000000)
from collections import deque, Counter
def getN():
    return int(input())
def getList():
    return list(map(int, input().split()))
import math


INF = 10 ** 20

def main():
    n = getN()
    if n == 1:
        print(1)
        print(1)
        return
    if n == 2:
        print(2)
        print(0)
        print("11")
        return

    print(n-1)
    print("11")
    for i in range(1, n-1):
        print("1" + "0" * i + "1")

    return
if __name__ == "__main__":
    main()

Submission status: Accepted

Solution code:
N=int(input())
if N==1:
    print(1)
    print(0)
elif N==2:
    print(2)
    print(11)
    print(0)
else:
    print(N-1)
    for i in range(N-1):
        print("0"+"1"*i+"0")

Submission status: Accepted

Solution code:
K = int(input())

if K==1:
    print(1)
    print(0)
elif K==2:
    print(2)
    print(0)
    print(11)
elif K >= 3:
    print(K-1)
    for i in range(K-1):
        print("0"+"1"*i+"0")

Submission status: Accepted

Solution code:
#!usr/bin/env python3
from collections import defaultdict, deque
from heapq import heappush, heappop
from itertools import permutations, accumulate
import sys
import math
import bisect
def LI(): return [int(x) for x in sys.stdin.readline().split()]
def I(): return int(sys.stdin.readline())
def LS():return [list(x) for x in sys.stdin.readline().split()]
def S():
    res = list(sys.stdin.readline())
    if res[-1] == "\n":
        return res[:-1]
    return res
def IR(n):
    return [I() for i in range(n)]
def LIR(n):
    return [LI() for i in range(n)]
def SR(n):
    return [S() for i in range(n)]
def LSR(n):
    return [LS() for i in range(n)]

sys.setrecursionlimit(1000000)
mod = 1000000007

def solve():
    n = I()
    if n == 2:
        print(2)
        print(0)
        print(11)
    elif n == 1:
        print(1)
        print(0)
    else:
        print(n-1)
        for i in range(n-1):
            print("0"+"1"*i+"0")
    return

#Solve
if __name__ == "__main__":
    solve()

Submission status: Accepted

Solution code:
n = int(input())

if n == 1:
    print(1)
    print(0)
    exit()
if n == 2:
    print(2)
    print(0)
    print(11)
    exit()

print(n-1)
for i in range(n-1):
    print("1" + "0"*i + "1")