为什么是水题选做呢?因为我只会水题啊 (
为什么是$Atcoder$呢?因为暑假学长来讲课的时候讲了三件事:不要用洛谷,不要用dev-c++,不要用单步调试。$bzoj$太难了,$Topcoder$整了好久没学会用,中国人要长期打$codeforces$那作息简直反人类,所以就选到$atcoder$啦.而且$AT$的英语感觉比较好懂,或许是因为都是亚洲人,思维比较同步?
关于水题简单粗暴的定义:$Beginner$ $Contest$的题目。(不过AB题真的有点太水了)
做了两套题后感觉有些$C$的思路还是比较妙的,最好评的是即使是$D$也不会有很高的代码难度。前段时间掉进了大数据结构&&实现麻烦的题目的大坑,现在发现自己的思维好差啊...以后要多做一点思维题.
109 C:https://abc109.contest.atcoder.jp/tasks/abc109_c
题意概述:给出$n$个城市的坐标以及起始坐标,每次可以移动$d$的距离(或正或负),求最大的$d$使得可以从起点出发经过所有点。
首先$d$必然是任意点到初始点的距离的因子,否则到不了,然后...答案就是所有点离初始点距离的最大公约数了。(好吧我承认这个$C$是挺水的)
1 # include <cstdio> 2 # include <iostream> 3 4 using namespace std; 5 6 int n,x,ans; 7 int a[100005]; 8 9 int gcd (int a,int b) 10 { 11 return b?gcd(b,a%b):a; 12 } 13 14 int main() 15 { 16 scanf("%d%d",&n,&x); 17 for (int i=1;i<=n;++i) 18 { 19 scanf("%d",&a[i]); 20 a[i]-=x; 21 if(a[i]<0) a[i]=-a[i]; 22 } 23 ans=a[1]; 24 for (int i=2;i<=n;++i) 25 ans=gcd(ans,a[i]); 26 printf("%d",ans); 27 return 0; 28 }
109 D:https://abc109.contest.atcoder.jp/tasks/abc109_d
题意概述:给定一个$H*W$的矩阵,每个格子中有一些硬币,每次可以从一个格子向与他四联通的任意一个格子移动一个硬币(只能移动一次),使得最终的局面中有偶数个硬币的格子最多。
我感觉这个题挺好的...因为只能移动一次,可以将每个格子的硬币数量$\%2$表示奇偶性,现在问题是怎样移动使得为$0$的格子最多.四联通是一个比较麻烦的东西,因为可能导致处理完的格子再变化.但是可以发现只需要考虑向下和向右移动的情况.偶+偶=偶,奇+奇=偶,偶+奇=奇.从偶数格子里往外移动一定是不合算的,不过两个奇数格子互相传递,中间经过一个偶数格子还是可以的.从一个奇数格子往偶数格子移动一定不会使解更劣:如果后来又将这个多余的硬币移到了奇数格子就可以使解加一,即使不可以,也不过是调换了这两个格子的奇偶性.这是这道题的解法就基本成型了:从上到下遍历棋盘,如果遇到奇数就往右边移动一个,如果已经是最后一列就考虑往下移动,这样构造出来的答案一定是最优的。
1 # include <cstdio> 2 # include <iostream> 3 4 using namespace std; 5 6 int h,w,f=1,j,x,lasx,lasy; 7 int g[502][502]; 8 int H,a[250005],b[250005],c[250005],d[250005]; 9 10 int main() 11 { 12 scanf("%d%d",&h,&w); 13 for (int i=1;i<=h;++i) 14 for (int j=1;j<=w;++j) 15 scanf("%d",&g[i][j]),g[i][j]%=2; 16 for (int i=1;i<=h;++i) 17 { 18 if(i%2) j=1; else j=w; 19 while (1<=j&&j<=w) 20 { 21 if(x) 22 { 23 a[++H]=lasx,b[H]=lasy,c[H]=i,d[H]=j; 24 if(g[i][j]) x=0; 25 } 26 else if(g[i][j]) x=1; 27 lasx=i; 28 lasy=j; 29 j+=f; 30 } 31 f=-f; 32 } 33 printf("%d\n",H); 34 for (int i=1;i<=H;++i) 35 printf("%d %d %d %d\n",a[i],b[i],c[i],d[i]); 36 return 0; 37 }
111 C:https://abc111.contest.atcoder.jp/tasks/arc103_a
2018.10.6:一个月没做发现只缺了两场,开心~
题意概述:给定一个长度为$n$的序列(保证$n$是偶数),可以随意改动序列中的数字,要求改成ABABABAB的形式,($A!=B$),求最少需要改动的次数.