好久没有更新博客了。
不过,2017第一更。
Ideas worth spreading
http://codeforces.com/problemset/problem/750/C
##Description
首先输入N
然后N行
每次两个数 A B
表示当前比赛的分数变化 和 当前比赛的段位
问最后最高可能是多少分
##Alogrithm
假设开始时0分,然后累加
这样就可以得到一个相对的分数和段位
例如
3
-7 1
5 2
8 2
这组数据,相对的分就是
0 1
-7 2
-2 2
6 ?
这组数据的意思是在"相对分"的情况下所处的段位
那么可以知道如果在第二段的"相对分"比第一段大,肯定哪里出问题了
不然就是有解的
我们找到最大的第二段的分,假设是max2,那么max2+1 对应的分为 1900的情况下最终分最大
这样ans = 1900-(max2 + 1) + s
s为最终的相对分
##Code
import sys
import math
n = int(sys.stdin.readline())
min1 = float('inf')
max2 = -min1
s = 0
x = 0
lv = 0
for i in range(n):
args = sys.stdin.readline().split()
lv = int(args[1])
if lv == 1:
min1 = min(min1, s)
elif lv == 2:
max2 = max(max2, s)
x = int(args[0])
s += x
if min1 <= max2:
print("Impossible")
else:
if math.isinf(max2):
print("Infinity")
else:
print(1900-(max2 + 1) + s)
博客介绍了一个比赛分数计算问题,先输入N,接着N行每行两个数表示比赛分数变化和段位,要计算最后最高可能分数。算法是假设初始0分累加得到相对分数和段位,通过比较不同段相对分,找到第二段最大分max2,以max2+1对应分为1900时最终分最大。
367

被折叠的 条评论
为什么被折叠?



