B.Chat
模拟题。一开始想复杂了,只要用数组模拟,每次操作遍历数组即可。
当二维数组开不下时,考虑用map代替
C.求单色三角形个数,单色描述为互素或不互素
1)先用容斥求与a[i]互素的个数f[i]
2)再套用公式求ans
D.数轴上n点移动k点使得新的n点到新重心差的平方尽量小
贪心。将边缘k点移动到中心n-k点的重心即可
注意:1.求和前先将坐标从小到大排序
2.运算时除法最后统一处理,避免精度出现问题
E.简单dp
G.2^n个位置分配2^m个物品,每个位置分配不同物品有不同的收益。并且当两个位置下标的二进制只差一位而且当这两位至少有一位的选择物品编号大于这一位给定的阀值编号时,会有新的收益,求最大收益
如果没有新的收益,每个位置分配权值最大的物品即可。矛盾在于位置关系决定了新的收益。在两对位置点中建立二分图,i->j表示i与j的二进制下标只差一位,权值是额外收益。原始收益的添加依靠超级源点和超级汇点,如何保证满足“这两位至少有一位的选择物品编号大于这一位给定的阀值编号”的条件?先将每个位置的物品分成两类:编号大于阀值/小于阀值,只有两类物品最大权值才可能作为最优解。当两个位置均选取阀值小的最大值时,则不能得到额外权值,此时舍去。当不同时选取阀值小时,能得到额外权值,因此三者连通S和T后至少舍去一条才能不连通。所以可以采用以下建图方法:
1.S->奇i:权值为小阀值最大权值 S->偶i:权值为大阀值最大权值
2.i->i+2^n:INF 奇i->满足条件的偶j+2^n:权值为额外权值
3.奇i+2^n->T:权值为大阀值最大权值 偶i+2^n:权值为小阀值最大权值
H.搜索+打表
I.简单题
J.较难dp
n*n矩形中有若干黑地板和坏地板,现在要将黑地板涂成白色。求能得到最大白色正方形的长度为k的填充方法数。
先统计
k<sz
的方法数。
dp[i][st]:前i行st状态的方法数。st是指第i行以第1,2…n-sz+1为开头的茶馆难度为k的黑色竖条的最小长度的压缩值。每个最小长度最大为sz,一共有n-sz+1个值,因此st大小为sz^(n-sz+1)
dp[n][st]求和即为
k<sz
的方法总数。2^m-sum(dp[n][st])即为>=sz的方法总数,设为a[sz],ans[sz]=a[sz]-a[sz+1],a[0]=2^m。m为黑地板的个数
K.波利亚定理
难点在于找置换个数及每个置换循环节个数