T1
(A)[https://www.nowcoder.com/acm/contest/175/A]
给出 l, r, k,请从小到大输出所有在 [l, r] 范围内,能表示为 k 的非负整数次方的所有数。
模拟 手抖啊QAQ
小小的防爆就是这里吧
while(tmp <= r / k){
tmp *= k;
if(tmp >= l){
printf("%lld ", tmp);
flag = 1;
}
}
T2
(B)[https://www.nowcoder.com/acm/contest/175/B]
给出一个序列 a1, ..., an。
定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ..., ar-1, ar 的最大公因数。
求最长的好的区间的长度。
较小数的好区间的最大长度 不可能被它区间里另一个较大数的好区间更新掉
所以从小到大排个序 线性解即可
到这里是自己手推的 然后复杂度瓶颈就卡在排序了
由上面那个性质可以稍稍一推 推出单调性 即l[i] r[i]随i增大不下降
然后就可以线性求解了。。。orz
T3
(C)[https://www.nowcoder.com/acm/contest/175/C]
你需要在一条无限长的道路上喷洒杀虫剂。
在这条道路上,总共有 N 个投放点,其中第 i 个投放点在数轴上坐标 pi 处。在每一个投放点,你可以选择往左喷洒或往右喷洒。但是由于风向和地理环境的影响,向左喷洒和向右喷洒的效果不一定相同。具体来说,在一个位置向左喷洒,可以覆盖 [pi - li, pi] 这一段区域,而向右喷洒可以覆盖 [pi, pi + ri] 这一段区域。
请你决定每个投放点是向左喷洒还是向右喷洒,来使得被杀虫剂覆盖的路段长度和最大。
非常毒瘤的情况如下