11399、11047、4296、1439、1080(標準)
22464 ワード
11399 ATM問題
入力
1行目は人数N(1≦N≦1000)を与える.2行目は一人一人がお金を引き出すのに必要な時間Piを与えます.(1 ≤ Pi ≤ 1,000)
しゅつりょく
1行目は、1人あたりの引き出しに要する時間のプロトコルの最大値を出力します.
出力
import sys
input = sys.stdin.readline
N = int(input())
N_list = list(map(int,input().split()))
Result_list = [ 0 for _ in range(N) ]
N_list = sorted(N_list)
Result=0
for i in range(N):
for j in range(i+1):
Result_list[i] += N_list[j]
for i in range(N):
Result += Result_list[i]
print(Result)
11047硬貨0質問する
ジュンギュが持っているコインは全部でN種類で、どれもたくさんあります.
硬貨を適当に使って、その価値の和をKにします.必要なコインの数の最大値を求めるプログラムを作成してください.
入力
第1行はNとKを与える.(1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)
2行目から、N行目では昇順にコインの価値Aiが与えられる.(1≦Ai≦100000,A 1=1,i≧2の場合、AiはAi-1の倍数)
しゅつりょく
Kドルを作るのに必要なコインの数の最大値を1行目に出力します.
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
coin_list = [ int(input()) for _ in range(N)]
coin_index = N-1
result = 0
while(True):
if K == 0:
break
elif K - coin_list[coin_index] < 0: # 뺄 수 없을 때
coin_index -= 1 # coin_index를 -1하고 continue
continue
else: # 뺄 수 있을 때
quotient = K//coin_list[coin_index] # 남은 값을 동전으로 나눈 몫
result += quotient
K -= quotient * coin_list[coin_index]
coin_index -= 1
continue
print(result)
##4796キャンプ登山家の金剛山さんは家族と一緒にキャンプに行きました.しかし、キャンプ場には以下の警告文が書かれている.
キャンプ場は20日間連続で10日間しか利用できません.
江山は28日間の休暇を取ったばかりだ.今度の休暇期間中、江山のキャンプ場は何日間使えますか?
江山はもう少し普通に問題を解きたいと思っている.
キャンプが続くP日の中で、L日しか使えません.江山さんはまだV休暇を取ったばかりだ.江山は最大何日キャンプ場を露出することができますか?(1 < L < P < V)
入力
入力は、複数のテスト・インスタンスから構成されます.各試験箱は、L、P、Vの順に1行で構成されている.すべての入力整数はint範囲です.最後の行は3つのゼロを与えます.
しゅつりょく
試験箱ごとに、江山はキャンプ場を最大数日の出力をサンプル出力として使用することができる.
import sys
input = sys.stdin.readline
case_cnt = 0
while(True):
case_cnt += 1
L, P, V = map(int, input().split())
# L,P,V가 모두 0일 시, 프로그램 종료
if L == 0 and P == 0 and V == 0:
break
# 총 휴가를 P로 나누고, 사용가능 한 일 수인 L * 몫을 result에 저장한다
quotient = V // P
result = quotient * L
# 남은 휴가가 L보다 클 경우 L을 result에 더해주고,
# 작을 경우 남은 휴가를 result에 더해준다.
if V - (quotient * P) > L:
result += L
else:
result += V - (quotient * P)
print("Case %d:"%case_cnt,result)
##1439反転マルチシスは、0と1のみからなる文字列Sを有する.多順はこの文字列Sのすべての数字を同じにしたいと思っています.マルチシスはSの連続する1つ以上の数字をつかんで、それからすべてひっくり返すことができます.反転は1を0に、0を1にすることを意味します.
例えば、S=0001100の場合、
全体的にひっくり返すと1110011です.
4文字目から5文字目を反転すると111111になり、2文字目ですべて同じ数字になります.
ただし、最初から4文字目から5文字目に文字を反転させると、1回に1億円に変換でき、1回目ですべて同じ数字に変換できます.
文字列Sが指定されている場合は、マルチシスが実行しなければならない最小操作回数を出力します.
入力
最初の行は文字列Sを与える.Sの長さは100万未満である.
しゅつりょく
最初の行は多順で行うべき最小限の行動回数を出力します.
import sys
input= sys.stdin.readline
bit_list = list(map(int, input().strip()))
len = bit_list.__len__()
cnt = 0
for i in range(1,len):
if bit_list[i] == bit_list[i-1]:
continue
else:
cnt += 1
if cnt%2 == 0:
print(cnt//2)
else:
print(cnt//2 + 1)
##1080マトリックス質問する
0と1のみからなる行列Aと行列Bがある.このとき、マトリクスAをマトリクスBに変換するために必要な演算回数の最大値を求めるプログラムを作成する.
変換マトリクスの演算には、次の3つがあります.×3部分行列のすべての要素を反転します.(0 → 1, 1 → 0)
入力
第1行は、行列のサイズN Mを与える.NおよびMは50以下の自然数である.2行目からN行はマトリクスAを与え、次の行からN行はマトリクスBを与える.
しゅつりょく
最初の行に問題の答えを出力します.AをBに変換できない場合は、-1を出力します.
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
A = [ list(map(int, input().strip())) for i in range(N) ]
B = [ list(map(int, input().strip())) for i in range(N) ]
cnt = 0
flag = 0
def transition(i,j):
global cnt
cnt += 1
for a in range(i,i+3,1):
for b in range(j,j+3,1):
if A[a][b]==1:
A[a][b]=0
else:
A[a][b]=1
for a in range(N-2):
for b in range(M-2):
if A[a][b] != B[a][b]:
transition(a,b)
for i in range(N): # 변환 후 일치하는지 확인
for j in range(M):
if A[i][j] != B[i][j]:
flag = 1
break
if flag == 1: # 변환이 불가능 하면 -1 반환
print(-1)
else:
print(cnt)
Reference
この問題について(11399、11047、4296、1439、1080(標準)), 我々は、より多くの情報をここで見つけました https://velog.io/@flip_404/백준-21년-10월-7일テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol