結果

問題 No.1831 Parasol
ユーザー ygd.ygd.
提出日時 2022-02-04 23:28:29
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 1,976 bytes
コンパイル時間 620 ms
コンパイル使用メモリ 87,216 KB
実行使用メモリ 79,032 KB
最終ジャッジ日時 2023-09-02 06:00:44
合計ジャッジ時間 7,669 ms
ジャッジサーバーID
(参考情報)
judge11 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 RE -
testcase_01 RE -
testcase_02 RE -
testcase_03 RE -
testcase_04 RE -
testcase_05 RE -
testcase_06 RE -
testcase_07 RE -
testcase_08 RE -
testcase_09 RE -
testcase_10 RE -
testcase_11 RE -
testcase_12 RE -
testcase_13 RE -
testcase_14 RE -
testcase_15 RE -
testcase_16 RE -
testcase_17 RE -
testcase_18 RE -
testcase_19 RE -
権限があれば一括ダウンロードができます

ソースコード

diff #

from msilib.schema import tables
import sys
#input = sys.stdin.readline #文字列につけてはダメ
input = sys.stdin.buffer.readline #文字列につけてはダメ
#sys.setrecursionlimit(1000000)
#import bisect
#import itertools
#import random
#from heapq import heapify, heappop, heappush
#from collections import defaultdict 
from collections import defaultdict, deque
import copy
#import math
#from functools import lru_cache
#@lru_cache(maxsize=None)
#MOD = pow(10,9) + 7
#MOD = 998244353
#dx = [1,0,-1,0]
#dy = [0,1,0,-1]


def main():
    N = int(input())
    M = 2*N - 1
    G = [set([]) for _ in range(M)]
    A = []
    for i in range(1,M+1):
        A.extend([i for _ in range(i)])
    #print(A)
    idx = 0
    while idx < M*(N-1):
        i = idx % M
        temp = A.pop()
        G[i].add(temp)
        idx += 1
    #print(G)
    dic = defaultdict(int)
    mx = 0
    for a in A:
        dic[a] += 1
        mx = max(mx, a)
    #print(ans)
    num = 0
    val = 0
    while num < M:
        val += 1
        num += val
    amari = num - M
    #print(amari)
    #print(num,val)
    ans = []
    idx = M-1 
    while True:
        for i in reversed(range(val)):
            if amari <= 0: break
            t = copy.copy(G[idx])
            t.add(i)
            dic[i] -= 1
            nt = tuple(t)
            ans.append(nt)
            amari -= 1
            idx -= 1
        break
    #print("mid",ans)
    used = defaultdict(int)
    while idx >= 0:
        for i in reversed(range(1,mx+1)):
            #print("i",i,"dici",dic[i])
            if dic[i] == 0: continue
            t = copy.copy(G[idx])
            #print("T",t)
            t.add(i)
            nt = tuple(t)
            if used[nt] >= 2: continue
            used[nt] += 1
            ans.append(nt)
            dic[i] -= 1
            #print(nt)
            break
        idx -= 1
    print(len(ans))
    for ret in ans:
        print(*ret)






if __name__ == '__main__':
    main()
0