为什么是水题选做呢?因为我只会水题啊 (
为什么是$Atcoder$呢?因为暑假学长来讲课的时候讲了三件事:不要用洛谷,不要用dev-c++,不要用单步调试。$bzoj$太难了,$Topcoder$整了好久没学会用,中国人要长期打$codeforces$那作息简直反人类,所以就选到$atcoder$啦.而且$AT$的英语感觉比较好懂,或许是因为都是亚洲人,思维比较同步?
那么哪些题目会被放到这个地方呢?$ABC$的后两题,也就是$ARC$的前两题(如果同时举办的话).至于$ARC$的后两题以及$AGC$的题,以后可能会单开一篇来写吧.似乎每当$ABC$和$ARC$一起办的时候就稍微难一点,只办$ABC$的时候题就非常水.
做了两套题后感觉有些$C$的思路还是比较妙的,最好评的是即使是$D$也不会有很高的代码难度。前段时间掉进了大数据结构&&实现麻烦的题目的大坑,现在发现自己的思维好差啊...以后要多做一点思维题.
107 C:https://arc101.contest.atcoder.jp/tasks/arc101_a
题意概述:数轴上放有$n$根蜡烛,初始时站在$0$坐标,移动的速度是一个定值,求最少用多少时间可以点亮$k$根蜡烛.
尺取法+分类讨论,如果一段区间横跨$0$坐标,那就先走离$0$近的部分,再折回来点亮另一边的,如果与$0$没有公共部分,直接一次走过去即可.
1 # include <cstdio> 2 # include <iostream> 3 # include <cstring> 4 # include <string> 5 # include <cmath> 6 # include <algorithm> 7 # define R register int 8 9 using namespace std; 10 11 const int maxn=100005; 12 int n,k,p1,p2,equ; 13 int cnt,a[maxn],ans; 14 15 int ab (int x) 16 { 17 if(x<0) return -x; 18 return x; 19 } 20 21 int ask (int x,int y) 22 { 23 if(x<0&&y<0) return -min(x,y); 24 if(x>0&&y>0) return max(x,y); 25 return ab(x)+ab(y)+min(ab(x),ab(y)); 26 } 27 28 int main() 29 { 30 scanf("%d%d",&n,&k); 31 for (R i=1;i<=n;++i) 32 { 33 scanf("%d",&a[i]); 34 if(a[i]<0) equ=i; 35 } 36 p1=p2=equ; 37 if(p2<k) p2=p1=k; 38 cnt=1; 39 while (cnt<k&&p1>1) p1--,cnt++; 40 if(cnt==k) ans=ask(a[p1],a[p2]); 41 while (p2<n) 42 { 43 p1++; 44 p2++; 45 ans=min(ask(a[p1],a[p2]),ans); 46 } 47 printf("%d",ans); 48 return 0;