Powered by:AB_IN 局外人
A. Buying Torches
真得好好吐槽一下。
样例出错两次,数据出错一次。
讲一下我的思路吧。
- 首先先明确至少需要多少个棍。 k k k个火炬,至少需要 k ∗ y + k k*y+k k∗y+k个棍棍。
- 其次要想,怎么从
1
1
1个棍,利用第一条贸易,变成
k
∗
y
+
k
k*y+k
k∗y+k个棍。我们可以先通过观察,假设
x
=
12
x=12
x=12。那么
1 − > 12 1->12 1−>12 12 − > 23 12->23 12−>23 23 − > 34 23->34 23−>34
可以发现每次加 11 11 11,也就是 x − 1 x-1 x−1
所以,设 t m p tmp tmp是贸易一的次数。
1 + ( x − 1 ) ∗ t m p − > k ∗ y + k 1+(x-1)*tmp->k*y+k 1+(x−1)∗tmp−>k∗y+k
这里我为什么要用 − > -> −>而不是 = = =呢?
因为可能不能正好等于 k ∗ y + k k*y+k k∗y+k。
那就取
1 + ( x − 1 ) ∗ t m p > k ∗ y + k 1+(x-1)*tmp>k*y+k 1+(x−1)∗tmp>k∗y+k
时 t m p tmp tmp的值.
最后 t m p tmp tmp再加上贸易二的 k k k次即可。
for _ in range(int(input())):
x,y,k=map(int,input().split())
tmp=(k*y+k-1)//(x-1)
if tmp*(x-1)<k*y+k-1:
tmp+=1
tmp+=k
print(tmp)
B. Negative Prefixes
模拟题,记录可以动的,从大到小排序。
for _ in range(int(input())):
n=int(input())
lst=list(map(int,input().split()))
s=list(map(int,input().split()))
index=[]
t=[]
for i in range(n):
if s[i]==0:
index.append(i)
t.append(lst[i])
if len(t)==0:
print(*lst)
continue
t.sort(reverse=True)
for i in range(len(index)):
lst[index[i]]=t[i]
print(*lst)
实在困得不行了。。随便签个到bia。
完结。