洛谷P2694 接金币
链接:P2694 接金币
思路很简单,就是输入有坑,并不是示例的输入格式,而是
5
3
-1 1
1 3
0 4
1
-3 2
3
-1 1
1 2
0 4
3
0 9
-1 1
1 3
8
70 141
-108 299
52 402
-70 280
84 28
-29 363
66 427
-33 232
每小组间有空格,接收数据的时候注意一下就可以了
代码:
G = int(input())
for _ in range(G):
N = int(input())
g = [(0, 0)]
for _ in range(N):
x, y = map(int, input().split())
g.append((x, y))
g.sort(key= lambda x:x[1])
input()
for i in range (N):
x1 = abs(g[i][0] - g[i+1][0])
y1 = g[i+1][1] - g[i][1]
if(x1 > y1):
print("Notabletocatch")
break
if(i == N-1):
print("Abletocatch")
P1372 又是毕业季I
链接:P1372 又是毕业季I
实际上就是求给定n个数的最大公约数
首先,若可能的最大公约数为a,取出的k个数为X1,X2,……,Xk且满足X1<X2<……<Xk,那么有X1>=a,X2>=2a,……,Xk>=ka。又∵Xk<=n,∴n>=ka,∴a<=n/k,又∵a为整数,∴a<=[n/k]([]为取整符号)。
另一方面,我们取[n/k],2*[n/k],……,k*[n/k],它们的最大公约数a=[n/k],且它们都小于等于n大于等于1,且互不相等,满足条件。
∴答案即为[n//k]。
n, k = map(int, input().split())
print(n // k)
P1106 删数问题
链接:P1106 删数问题I
本题大致思想很简单,根据要删除的数字个数,从前往后两两比较删除即可
本题容易踩坑的地方:
- 先导零输出时记得要删除
- 创建数组的时候可以多留一个长度置0,方便删除最后一个数字
代码:
N = 251
n = input().strip()
k = int(input())
a = [0] * (len(n)+1)
for i in range(len(n)):
a[i] = ord(n[i]) - ord("0")
for _ in range(k):
for i in range(len(a)-1):
if(a[i]>a[i+1]):
a.pop(i)
break
while(a[0] == 0 and len(a)-1 != 1):
a.pop(0)
for j in range(len(a)-1):
print(a[j], end="")
谈判
链接: 谈判
根据题意来就好了,先排序,后累加即可
代码:
n = int(input())
nums = input().split()
nums = [int(nums[i]) for i in range(n)]
nums.sort()
res = nums[0]*(n-1)
for i in range(n-1):
res += nums[i+1] * (n - i-1)
print(res)