#12115: 這題根本不用while迴圈 輕鬆輾壓


lessonone (我好弱)

學校 : 國立彰化師範大學
編號 : 66494
來源 : [60.251.182.5]
最後登入時間 :
2017-07-15 14:42:00
a215. 明明愛數數 | From: [36.235.9.52] | 發表日期 : 2017-06-03 13:32

import sys
from math import ceil
ip = []
op = ""
for s in sys.stdin:
s =s.replace("\r","").replace("\n","")
ip.append(s.split())
n = len(ip)
for i in range(0,n):
if int(ip[i][0]) > int(ip[i][1]):
op += "1\n"
else:
an = ((4.0*int(ip[i][0])**2-4.0*int(ip[i][0])+8.0*int(ip[i][1])+1.0)**0.5 - 1.0) / 2.0
t = ceil(an)
if t == int(an):
op += str(t - int(ip[i][0]) + 2) + "\n"
else:
op += str(t - int(ip[i][0]) + 1) + "\n"
print(op[:-1])

 

從n開始數 表示n為公差1的等差數列的首項 m為等差數列的和

題目可以變成是要解不等式

假設加到an項之和會大於m

則列式 (n+an)*(an-n+1)/2>m

就可以曉得an的範圍 當然就可以曉得項數的範圍

 
ZeroJudge Forum