キャンディーの製造
制限時間: 1000MS メモリ制限: 65536KB
トピックの説明:
キャンディ工場では n 種類のキャンディを生産でき、その数を 1 ~ n とすると、毎日 i 個の ci 個のキャンディを生産できます。今日、工場は注文を受けました。需要はキャンディーのパックです。キャンディーの各パックは同じ種類である必要があります。各パックの数量は b 未満であってはなりません。キャンディー工場に在庫がないと仮定すると、いくつこの注文が完了するまでに何日かかりますか?
説明を入力してください
最初の行は 3 つの正の整数 n、a、b で、それぞれキャンディ工場が生産できるキャンディの種類の数を表します。注文要件はキャンディのパックで、各パックは b 以上です。
2 行目は n 個の正の整数 c1、c2、...、cn です。ここで、i 番目の数値 ci は、工場が毎日生産できる i 番のキャンディーの数を表します。
すべてのデータに対して保証: 1<=n<=100000、1<=a,b<=10^7、1<=a<=10000
出力の説明
1 行に 1 つの正の整数。Tingdan の場所になるまでの最小日数を示します。
サンプル入力
3 10 20
7 9 6
サンプル出力
10
ヒント
9日目は、3種類のキャンディーの数量はそれぞれ63個、81個、54個で、それぞれ3パック、4パック、2パックの計9パックまで梱包可能です。現時点では、注文要件を設定することはできません。会った。
10日目は3種類のキャンディーの数量がそれぞれ70個、90個、60個となり、それぞれ3パック、4パック、3パックの合計10パックでご注文に対応できます。
アイデア
まずチェック関数を作成し、その日の日数 x を渡し、x 日に製造できるキャンディーのパック数と、キャンディーの総数が質問の要求数より大きいかどうかを計算します。の場合は true を返し、それ以外の場合は false を返します。
この質問には少なくとも 1 つのパックが必要であり、各パックには少なくとも b 個が含まれています。工場では毎日同じ種類のキャンディーが少なくとも 1 つ生産されているため、最大でも a*b 日でそれらすべてを確実に生産できます。 , b<10^7、つまり、生産は 10^14 日で確実に完了し、二分探索法を使用して、0 から 10^14 までの非常に多くの生産を行うことができる最小日数を見つけます。
コード
n,a,b = map(int,input().split(" "))
c = list(map(int,input().split(" ")))
def check(x):
sum1 = 0
for i in range(len(c)):
sum1 += (x*c[i]) // b
if sum1>=a: return True
else: return False
l,r = 0,10**14
while l<r:
mid = (l+r)//2
if(check(mid)):
r = mid
else:
l = mid+1
print(r)
対立
制限時間: 1000MS メモリ制限: 65536KB
質問の説明
ここでは、大文字の英語文字で構成される n 個の文字列が存在しますが、これらの文字は互いに含まれたり、等しくなったりすることはありません。次の条件を満たす文字を知りたいです。条件を満たす文字列が S であるとします。結合後に空ではないプレフィックスと空ではないサフィックスを削除することで文字列 S に変換できる文字列が他に 2 つあります。スプライシングに使用される 2 つの文字列は同じでも S でもかまいません。
説明を入力してください
最初の行は正の整数 n で、文字列の数を示します。
次の n 行には、各行に大文字の英語文字で構成される文字列が含まれます。
すべてのデータの場合、1<=n<=5000、文字列長<=20。
出力の説明
最初の行は、条件を満たす文字列の数を示す正の整数 m を出力します。
次に m 行が出力されますが、各行は英大文字からなる文字列であり、条件を満たしていることを示します。辞書編集上の昇順で出力します。
サンプル入力
10
KPZOKNSTGLUNPPDKPFEW
NDPKU
KPEEWN
CCHXNNY
GWSGZ
NNYCCHX
FMVKSOHOPGZWG
SGZNNYCC
PKUFMVKSOHOPG
CCSGZN
サンプル出力
5
CCHXNNY
CCSGZN
NNYCCHX
PKUFMVKSOHOPG
SGZNNYCC
アイデア
セットを使用してすべての文字の接頭辞と接尾辞を記録し、すべての文字列を反復処理して、各文字列の接頭辞が接尾辞セット内で見つかるかどうか、および接尾辞が接頭辞セット内で見つかるかどうかを確認します。
n = int(input())
s = []
for i in range(n):
s.append(input())
pre,tail = set(),set()
for string in s:
for j in range(1,len(string)):
pre.add(string[:j])
tail.add(string[j:])
ans = []
for string in s:
for j in range(1,len(string)):
if string[:j] in tail and string[j:] in pre:
ans.append(string)
break
ans.sort()
print(len(ans))
for s in ans:
print(s)
Wannuo コーディングと他の多くの偉い人の協力に感謝します。