1497C2. k-LCM (hard version) Problem - 1497C2 - Codeforces
给定一个整数 n,请找到 k 个和为 n 的正整数a1,a2,…,ak,使得 lcm{a1,a2,…,ak}⩽n/2 。
t 组数据,1⩽t⩽1e4,3⩽n⩽1e9,3⩽k⩽n。保证所有 t 组数据中∑k⩽1e5。
思路
数学题,有点离谱
先看简单版本 k=3情况
n为奇数,直接 n--; {1,n/2,n/2}
n为偶数
n被4整除,直接{n/2,n/4,n/4}
不被4整除,n-=2; {2,n/2,n/2}
两种偶数情况不能统一,被4整除情况下分为{2,n/2,n/2}的话n/2为奇数
在引申到k>3,可以直接1111111,{a,b,c}
1334C. Circle of Monsters Problem - 1334C - Codeforces
有 N 头怪兽,他们围成一个环,顺时针编号 1,2,3,4,…,N 每一头怪兽都有 2 个属性,一个是它的生命值 ai,第二个是它的爆炸值 bi。
你有一把手枪,每开一枪可以对你选定的一只怪兽造成 1 伤害(使其生命值 −1−1)
当一个怪兽死后(生命值 ≤0≤0),它会发生爆炸,并对下一个怪兽(假设当前怪兽为编号 i,则下一个为 i+。如果i=n,则下一个为 1 号) 造成 bi 点伤害。如果下一个怪兽已经死了,则没有事发生。如果下一个怪兽被炸死了,那么他也会爆炸,并对下下个怪兽造成伤害。以此类推。
询问你最少开几枪可以杀死所有怪兽。
∑N≤3×1e5,ai,bi≤1e12
思路
前缀和
由于N为1e5数量级,其实可以O(n^2)
但是用前缀和可以只用O(n)
先计算 c[i]=max(0,a[i]-b[i-1])的数组,以及c[i]的前缀和数组pre[i],或者c[i]的总和sum
那么对先杀第i个,其结果为a[i]+pre[n]-pre[i]+pre[i-1]
也可以sum+a[i]-c[i]