A

题意:求1到2020有多少个字符2。
模拟即可。

B

题意:求1到2020有多少对i,j满足i,j互质。
模拟。求gcd可以直接用递归板子:

int gcd(int x,int y){
    return x%y==0?y:gcd(y,x%y);
}

C

题意:构建这样一个矩阵:
1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
11 …

求第20行20列的数。
同样是模拟。要注意角标的走向(我是用一个jud判奇偶,奇数的时候往右上走,偶数往左下走)

D

题意用7根火柴摆成下图(画的丑见谅,意会就好):
--
| |
--
| |
--
选择一些火柴,求所有火柴均联通的方案数。
直接状压搜索即可。每个火柴选为1,不选为0,一共128种情况。判连通块我是用建图的方法,如果两个火柴公用一个交点,那么就这两个火柴连一条边。最后dfs搜索所选的火柴对应连通块数量即可。

E

题意:20个圆和20个直线最多把平面分成多少份?
找规律。第一个圆增加1块,第二个圆增加2块,第三个圆增加4块,第四个圆增加6块。。以此类推,后面每一个圆增加 块。然后计算直线的情况,可以关注交点,第一个直线最多有40个交点,第二个直线41个交点。。以此类推,后面每一个直线增加 个交点。而除了第一条直线以外,每一条直线产生 个交点就会增加块(第一条直线的40个交点只能增加40块)。最后就得解了。

F

题意:输入每个学生得分,求最高分、最低分和平均分。
模拟即可。

G

题意:输入一个日期,求下一个回文日期和"ABABBABA"型日期。
码农题,要注意的细节比较多(闰年等),我是用面向对象思想解决的,写了个day类,这样可以判断它的下一个day是多少,是不是两种所求日期。

H

题意:定义字符串的权值是“只出现一次的字符个数”。求输入字符串的所有子串权值和。
转换一下思路即可。求每个字符在多少个子串里贡献了权值,答案明显是,其中left和right分别是和a[i]相等是前一个字符或后一个字符的角标。这样通过预处理出所有字符的位置就能得解了。复杂度O(n)

I

题意:求椭圆和三角形重合面积。
不会做。
大概想法是改变坐标轴位置,把椭圆放到中心,这样椭圆就是 ,然而哪怕得到了这个方程,和三角形重合面积仍然有太多情况需要讨论。

J

题意:给定一个n,求n次冒泡排序成功的最短字符串(多个最短输出字典序最小)。
观察到有50%的数据n≤100,因此直接打表就可以了。
由于打表的dfs不太好写,我索性在纸上手推了n从1到100的情况然后print输出(花了1个多小时)
可以发现后面的规律都比较好找,比如:
n=55 kjihgfedcba
n=54 jihgfedcbaa
n=53 ihgfedcbbaa
n=52 hgfedccbbaa
n=51 gfeddccbbaa
…………
这样可以节省大量的构造时间。
至于100%的数据,几乎完全没有思路。因为可以发现,当 的时候,字符串变成了zyx....cba,这时26个字符就全部用到了,后面就无法再利用刚刚找到的规律了,这种情况非常难处理。