パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

コードコンテストの挑戦51-110

2018-07-14 | プログラムをマスター計画2020
番号は新たに1から重複問題とかは省いてます。

#1 果物の表示 range(9,-1,-1) 9〜0まで-1ずつ

n = int(input())

print("#"*n)
for i in range(n):
    print(" "*(n-i-1)+"#"*(2*i+1))
    
for i in range(n-1,-1,-1):
    print(" "*(n-i-1)+"#"*(2*i+1))



#2 数値の整形 n[-1]で最後の要素

n=input()
n=n.replace(" ","")
o=""
for i in range(11):
    o=n[-i-1]+o
    if i%3==2:o=" "+o

print("0"+o)



#3 回文チェック [::-1]で文字列をヒックリ返す

n = int(input())
for i in range(n):
    w = input()
    if w==w[::-1]:
        print("true")
    else:
        print("false")



#4 x箱数 n分で1箱 t時間 a運べない数 

x = int(input())
n = int(input())
t = int(input())

a=x-int(t*60/n)
if 0>a:a=0

print(a)



#5 HELLO→EHLLO 1234 →2143

s = input()
o=""
for i in range(int(len(s)/2)):
    o+=s[2*i+1]+s[2*i]
if len(s)%2==1:
    o+=s[-1]
print(o)



#6 xがpの数列ですべて割り切れれば"T"

n = int(input())
m = int(input())
p=[]
for i in input().split():
    p.append(int(i))
o=""
for i in input().split():
    x = int(i)
    sw=0
    for j in p:
        sw+=x%j
    if sw==0:
        o+="T"
    else:
        o+="F"
print(o)



#7 120→40 80→40 10000→2000

n = int(input())
print(int(n/len(str(n))))



#8 シンプルバトルシステム h,v HP  d,a 相手に与えるダメージ どちらが何ターンで勝つ

#他の方の答えです
h,d=[int(i)for i in input().split()]
v,a=[int(i)for i in input().split()]
t=0
while h>0 and v>0:
    h-=a
    v-=d
    t+=1
w=1 if h>0 else 2
print(str(w)+" "+str(t))



#9 数字が並んでいる 0は最大いくつ並ぶ

n = input()
for i in range(1,9):
    n=n.replace(str(i)," ")
a=n.split()
if n.count("0")==0:
    print("0")
else:
    mx=0
    for i in a:
        if len(i)>mx:
            mx=len(i)
    print(mx)



#10 ぐるっと和を描いて物騒な問題 剣を回して一人倒して次に渡す

n=int(input())
live=[i+1 for i in range(n)]
dead=[0 for i in range(n)]
p=0
k=-1
while n-1>sum(dead):
    if dead[p]==0:
        if k>0:dead[p]=1
        k*=-1
    p+=1
    if p>n-1:p=0
    
for i in range(n):
    if dead[i]==0:
        print(live[i])



#11 支払いを最小の枚数で ユーロかな

u=[500,200,20,10,2,1,0.5]

n = float(input())

if int(2*n)!=2*n:
    print("IMPOSSIBLE")
else:
    o=""
    for i in u:
        if int(n/i)>0:
            o+=str(int(n/i))+" x "+str(i)+", "
            n=n-int(n/i)*i
    print(o[:-2]+"€")



#12 反発0.5の高さ、6回バウンド後の高さh、最初の高さ

h = int(input())
print(h*2**6)



#13 0で終了 821 8>=2+1 2>=1 941 9>=4+1 4>=1 マジックナンバーのみ表示 

p=0
while 1:
    x = int(input())
    if x==0:break
    if 10>x:continue
    n=len(str(x))
    s=str(x)
    sw=1
    for i in range(n-1):
        #print(sum(int(j)for j in s[i+1:]))
        if sum(int(j)for j in s[i+1:])>=int(s[i]):sw=0
    if sw==1:
        print(s)
        p+=1
        
if p==0:print("NONE")



#14 アスキーコードから文字列に

_=input()
print(''.join(chr(int(i))for i in input().split()))



#15 妻 X人、各妻にX人の子、あわせて

x=int(input())
print(x+x*x+x*x*x)



#16 + box

x=int(input())
for i in range(x):
 print("+"*x)



#17 5→2500 11→12100 1→100

n=int(input())
print(n**2*100)



#18 3→192 5→320 7→448

h = int(input())
print(h*64)



#19 未解決私見鬼問 三角形の中

x, y = [int(i) for i in input().split()]
n = int(input())
for i in range(n):
    x1, y1, x2, y2, x3, y3 = [int(j) for j in input().split()]
    al=((x1-x2)**2+(y1-y2)**2)+((x1-x3)**2+(y1-y3)**2)+((x3-x2)**2+(y3-y2)**2)
    cl=((x1-x)**2+(y1-y)**2)+((x2-x)**2+(y2-y)**2)+((x3-x)**2+(y3-y)**2)
    if al>cl:
        print("inside")
    else:
        print("outside")



#20 10人の生徒、3つの得点。成績悪い順に席を決定

t=[]
for i in range(10):
    name,s1,s2,s3 = input().split()
    t.append((name,float(s1)+float(s2)+float(s3)))
    
for i in range(10):
    b=100
    bp=-1
    bn=""
    for j in range(len(t)):
        n,s=t[j]
        if b>s:
            b=s
            bp=j
            bn=n
    del t[bp]        
    print(bn)



#21 変わった数字で16進

a=["HO","HA","HE","HI","BO","BA","BE","BI","KO","KA","KE","KI","DO","DA","DE","DI"]

n = int(input())

if n==0:
    print(a[0])
else:
    o=""
    while n>0:
        o=a[n%16]+o
        n=int((n-n%16)/16)
    print(o)



#22 大文字アルファベット列変換 (a x alphabetNo + b)mod 29→新alphabetNo 特典" .,"付

s="ABCDEFGHIJKLMNOPQRSTUVWXYZ .,"
p=input
a,b=[int(i)for i in p().split()]
l=int(p())
t=p()
o=""
for i in t:
 if i==" ":i=chr(91)
 if i==".":i=chr(92)
 if i==",":i=chr(93)
 o+=s[((ord(i)-65)*a+b)%29]
print(o)



#23 16進数のアスキーコードから文字列へ 

o=""
value_count = int(input())
for value in input().split():
    o+=chr(int(value,16))
print(o)



#24 a*x+bをn回

a, b = [int(i) for i in input().split()]
n = int(input())
for i in range(n):
    x = int(input())
    print(a*x+b)



#25 6桁の数字 1,2,3桁の数字の合計=4,5,6桁の数字の合計

n = int(input())
for i in range(n):
    t = input()
    if (int(t[0])+int(t[1])+int(t[2])==int(t[3])+int(t[4])+int(t[5])):
        print("true")
    else:
        print("false")



#26 ユニークな数字 "1 2 3 5"→"2" "5 8 99 107"→"8" 

n = int(input())
n0=0
n1=0
a0=""
a1=""
for i in input().split():
    number = int(i)
    if number%2==0:
        n0+=1
        a0=str(number)
    else: 
        n1+=1
        a1=str(number)
if n0==1:
    print(a0)
else:
    print(a1)  



#27 繰り返し表示

n = int(input())
w = input()
for i in range(n):
    print(w)



#28 未完分子量演算

n = int(input())
dic={}
for i in range(n):
    atom, molar_mass = input().split()
    molar_mass = float(molar_mass)
    dic[atom] = molar_mass
molecule = input()
numSw=0
num=0

b=""
a=0
for i in molecule:
    if i.isnumeric():
        if numSw==0:
            num=int(i)
            numSw=1
        else:
            num=num*10+int(i)
    else:
        if numSw==1:
            a=a+dic[n]*num
            
        if b=="":
            a=a+dic[b]    
        b=i    
        
print(a)



#29 パイ初期m個あり 1時間毎にr個ロスト t時間後にn個食べれたら"HAPPY" 

n,m,r,t=[int(i)for i in input().split()]
s="NOT "
if (m-r*t>=n):s=""
print(s+"HAPPY")



#30 足し算を小さい順に並び替え

s=[int(i)for i in input().split("+")]
s.sort()
print("+".join([str(i)for i in s]))

#別解
print('+'.join([str(i)for i in sorted(input().split('+'))]))



#31 アルファベットの文字列を並び替えて最大の長さの回文を作る。辞書順の先頭の一文(回文は意味不問)

l = int(input())
s = input()

a=[]
for i in range(26):
    a.append(s.count(chr(ord("a")+i) ))

o=""
s=""
for i in range(26):
    o+=chr(ord("a")+i)*int(a[i]/2)
    if a[i]%2==1 and s=="":
        s=chr(ord("a")+i)
    
print(o+s+o[::-1])



#32 謎の問題、正解者のソース(難題が2問続くと心折れます)

n = int(input())

r = []

for i in range(n):
    a, b = [int(j) for j in input().split()]
    found = False
    for i in range(1, a):
        if b * i % a == 1:
            r.append(str(i))
            found = True
            break
    if not found:
        r.append("NaN")

print(" ".join(r))



#33 "LLLDDDRRRUUU"からXで絵を書く(実際はXのある所だけ表示という鬼仕様)

def put(x,y):
    mp[y]=mp[y][:x]+"X"+mp[y][x+1:]
mp=[]
for i in range(20):
    mp.append(" "*20)
inst=input()
sx=10
sy=10
for s in inst:
    if s=="U":sy-=1
    if s=="D":sy+=1
    if s=="L":sx-=1
    if s=="R":sx+=1
    put(sx,sy)

for i in mp:
    print(i)



#34 未解決 文字列の中で一番長い同じ文字列を答える "ex. aabb in ccddaabb inc"→"aabb in"

'''
def sw(t1,t2,p1,p2):
    o=""
    for i in range(1024):
        if t1[p1+i]!=t2[p2+i]:return o
        o+=t1[p1+i]

t = input().lower()
mx=""
t1=t+"@"
t2=t+"@"


for i in range(len(t)):
    for j in range(len(t)):
        if t1[i]==t2[j]:
            sw(t1,t2,i,j):
            
'''        
t = input().lower()  
    
    
if mx=="":
    print("None")
else:
    print(mx)



#35 h高さ w幅 o隙間 ビルのような風景を書く

n = int(input())
b=[]
mx=0
for i in range(n):
    h, w, o = [int(j) for j in input().split()]
    b.append((h,w,o))
    if h>mx:
        mx=h

p=[]
for i in range(mx):
    l=""
    for j in b:
         h,w,o=j
         s="#"
         if i>=h:s="."
         l+=s*w+"."*o
    p.append(l)

for i in p[::-1]:
    print(i)
         
#print("..##")
#print("#.##")
#print("#.##")



#36 aのb乗した答えの各数字を足すかな?

print(sum(int(i)for i in str(int(input())**int(input()))))



#37 未解決 約数の数が2なら表示が変わる? 

def semi(n):
    c=0
    bn=n
    for j in range(4):
        for i in range(2,n):
            if n%i==0:
                c+=1
                n=int(n/i)
                break
    if c==2:return bn
    return 0
n=int(input())
for i in range(n):
    r = semi(int(input()))
    if r>0:print(r)



#38 未解決 文の中の各単語をアナグラムすると何パターンあるか

import itertools
s=input().replace("'","").split()
a=1
for i in s:
 q=(j for j in i)
 a*=len(list(itertools.permutations(q)))
print(a)



#39 nノード数 lリンク数 n1,n2ノード間リンクあり(距離はすべて1) s開始位置 e終了位置 s-e間の最短は

n = int(input())
l = int(input())
a=[]
for i in range(l):
    n1, n2 = [int(j) for j in input().split()]
    a.append((n1,n2))
    a.append((n2,n1))
s = int(input())
e = int(input())

nodeL=[10000 for i in range(n)]

nodeL[s]=0
sp=[s]
while len(sp)>0:
    for i in a:
        n1,n2=i
        if n1==sp[0]:
            if nodeL[n2]>nodeL[n1]+1:
                nodeL[n2]=nodeL[n1]+1
                sp.append(n2)
    del sp[0]
print(nodeL[e])



#40 数字 x 最初の約数

def f(n):
    for i in range(2,n+1):
        if n%i==0:return i
    return n
c = int(input())
print(c*f(c))



#41 3点 角の名前 x,yが与えられ直角三角形なら90度の角の名前、なければ"_"

x=[]
y=[]
p=[]
for i in range(3):
    p1, x1, y1 = input().split()
    p.append(p1)
    x.append(int(x1))
    y.append(int(y1))

x=x+x
y=y+y

l=[]
for i in range(3):
    l.append((x[i]-x[i+1])**2+(y[i]-y[i+1])**2)

if l[0]==l[1]+l[2]:
    print(p[2])
elif l[1]==l[0]+l[2]:
    print(p[0])
elif l[2]==l[0]+l[1]:
    print(p[1])    
else:
    print("_")



#42 その数字が6で割り切れて素数でなければ表示かな?

def sosu(n):
    if 2>n:return False
    for i in range(2,n):
        if n%i==0:
            return False
    return True
n=int(input())
if n//6==0 or sosu(n):
 print("NONE")
else:
 print(n//6)



#43 クロスワードを作る文字列は横、縦ただし同じ長さなら入れ替える 

w1,w2 = input().upper().split()

if len(w1)==len(w2):
    w1,w2=w2,w1
#print(w1,w2)
mw="?"
for i in w1:
    m=w2.find(i)
    if m>-1:
        mw=w2[m]
        break

if mw=="?":
    print("NO COMMON CHARACTER")
else:
    m1=w1.find(mw)
    m2=w2.find(mw)
    
    for i in range(len(w2)):
        if i==m2:
            print(w1)
        else:
            print(" "*m1+w2[i])



#44 未完成 "10 times write hello. yahoo"とか"write hello. 10 times"なら10回"hello"表示 writeに対して"."がないとエラー表示

s=input()
c=s.split()
p=1
for i in range(1,len(c)):
    if c[i]=="times":
        if c[i-1].innumeric():
            p=int(c[i-1])
sp=s.find("write ")
ep=s.find(".")
if ep>sp and sp>0:
    for i in range(p):
        print(s[sp+6,ep])
else:
    print("Syntax Error")



#45 数列すべての最小公倍数を求める

import math

def lcm(x, y):
    return (x * y) // math.gcd(x, y)

n = int(input())
f=1
for i in input().split():
    m = int(i)
    f=lcm(f,m)

print(f)



#46 数値をバイナリにして左右ひっくり返して数値に戻す

bi=bin(int(input()))
n=bi[2:][::-1]
b=1
a=0
for i in n:
    if i=="0":
        a+=b
    b*=2
print(a)



#47 素数の強さ弱さ判定 (元の素数の2倍と素数の前後の素数の和の比較)

def s(n):
    if 2>n:return False
    for i in range(2,n):
        if n%i==0:return True
    return False
n=int(input())
u=n+1
while s(u):u+=1
l=n-1
while s(l) and l>0:l-=1
if u+l>2*n:
    print("WEAK")
elif 2*n>u+l:
    print("STRONG")
else:
    print("BALANCED")



#48 "123456X"の各数字を足したものを10で割ったあまり?

s=input()[::-1][1:]
a=sum(map(int,s))
print(a%10)



#49 sz*szの中にすべて1で作られている正方形の最大の幅

def get(x,y,sz):
    if x>=sz or y>=sz:return "0"  
    return mp[y][x]
    
def box(sx,sy,sz,sc):
    for x in range(sx,sx+sc): 
        for y in range(sy,sy+sc):
            if get(x,y,sz)=="0":return False
    return True
    
sz=int(input())
mp=[]
for i in range(sz):
    mp.append(input().replace(" ",""))

mx=0
for sx in range(sz):
    for sy in range(sz):
        for sc in range(sz+1):
            if box(sx,sy,sz,sc):
                if sc>mx:mx=sc
print(mx)



#50 2つの角度からその狭いほうの角度を求める(360度単位)

a, b = [int(i) for i in input().split()]

a=a%360
b=b%360

c=abs(a-b)
if c>180:c=360-c
print(c)



#51 問題不明、解答も第3者

n=int(input())
p=int(input())
c=0
while n>=p:
 c+=n//p
 n//=p
print(c)



#52 1からnまでかけあし

l=input()
a=1
for i in l:
    a*=(int(i)+1) 
print(a)



#53 次の素数

def sosu(n):
    if 2>n:return False
    for i in range(2,n):
        if n%i==0:return False
    return True
        
x=int(input())+1
while sosu(x)==False:
    x+=1
print(x)



#54 100までの数あて "+ 50","- 52"→"51"  "= 51"→"51"

#ミスあり自分
h=[1 for i in range(101)] 
h[0]=0

for i in range(int(input())):
    n,a = input().split()
    n=int(n)
    if a=="=":
        for i in range(101):
            if i!=n:h[i]=0       
    if a=="+":
        for i in range(n+1):
            h[i]=0
    if a=="-":
        for i in range(n,101):
            h[i]=0

#print(h)
if sum(h)==1:
    for i in range(101):
        if h[i]==1:
            print(i)
else:
    print("Impossible")


#他の方の答え こんなif else文できるのか...
a=-1
b=101
v=0
boo=0
n = int(input())
for i in range(n):
    x,s = input().split()
    if s=='+':a=max(a,int(x))
    if s=='-':b=min(b,int(x))
    if s=='=':v=int(x);boo=1
if boo:
    if b>v>a:print(v)
    else:print("Impossible")
else:
    if b-1>a:print(a+1)
    else:print("Impossible")



#55 文字列Tを鍵Cを使って暗号化

t=input()
c=input()
n=0
o=""
for i in range(len(t)):
 if t[i]!=" ":
  b=ord(t[i])-ord(c[n])
  b=b%26
  o+=chr(97+b)
  n+=1
  if n>=len(c):n=0
 else:
  o+=" "
print(o)



#56 再生紙から新聞何部つくれるか

#25% 正解
pw,ph = [int(i) for i in input().split("x")]
p = int(input())
n = int(input())
news=pw*ph+p
#print(news)
total=0
for i in range(n):
    gift = input()
    x,y,z=[int(i) for i in gift.split("x")]
    total+=(x*y+x*z+y*z)*2
 
print(int(total/news))

#他の方の答え スペース使い方から変数名の付け方まで参考にしたい。
import sys
import math

# Auto-generated code below aims at helping you parse
# the standard input according to the problem statement.

a,b = map(int, input().split("x"))
size = a*b

pages = int(input())

needed = (pages * size) // 4

n = int(input())

have = 0

for i in range(n):
    a,b,c = map(int,input().split("x"))
    have += 2*a*b + 2*a*c + 2*b*c
    
print(have // needed)


















最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。