赛后总结AtCoder Beginner Contest 090(Beginner)
妈也,这些题目我竟然……做不出!!!???
考时和平时是两、码、事!!!
——————————————————————————————————————————
好了,让我们冷静地分析一下为什么会这样。[题意、题解分析来自网络][英语不好是个伤]
a.3分钟。其实花了好久才看懂题面。
A题题解:直接输出左上对角线即可。
b.12分钟。还好,达标。
B题题意:求给定区间中回文数的个数。
B题题解:暴力即可。
c.题面都没有看懂(为什么不叫它扫雷),但是俺机智地找到了规律!
C题题意:给定一个矩阵,每个点放正面朝上的牌,依次翻动每张牌,翻动时会同时翻动该点周围8个点的牌,问最后正面朝下的牌的个数
C题题解:对于只有一行的情况就是只有两头的牌最后是正面朝上的,多行的情况下可以看出只有最外围一圈的牌翻动偶数次,即最后正面朝上。
英雄所见略同。
所以我:
if(n==1||m==1) printf("%lld",n*m-2);
else if(n==2||m==2) printf("lld",n*m-4);
else printf("%lld",n*m-(n+m-2)*2);
但是为什么还是WA了一个点嘞?
因为当n=1且m=1时,代进去发现答案是个负数。所以在前面要加一行特判:if(n==1&m==1)cout<<1<<endl; return 0;
得出经验:规律题,越靠近0的数越容易有坑。建议找找负数、负环之类的特殊情况并特判掉。
d.数论推对了!按理来说,代码明明是对的。
但是sum=(b-k)*(n/b)+((n%b)+1-k);时,不仅仅是sum,n、k也要开long long!!!(n,k<=10^5)
首先呢,又不是开不起,开着long long又怎样
第二是,比赛时时间不多了,心里急,就按照习惯打了。
我的习惯:能开float不开double,能开int不开long long。
得出经验:在空间满足的前提下,养成开更优类型的数组/变量的习惯。