2019.07.04【NOIP提高组】模拟 A 组

T1:这一题就是一个数位dp。

设f[i][j][k][0/1][0/1]表示第i位填j,i-1位填k,当前数是否已经比a大/比b小的方案数。

转移枚举下一位填那个数就好了,保证不回文的话判断一下新填的数不为j或k就好了。

我做得有点复杂,我枚举了数字的长度再进行dp,这样可以排除前导0的影响。

 

总结:比赛时因为漏判了0、0的情况少了1分。自行对拍的时候要考虑多种情况。尽可能学习一下脚本对拍。

 

T2:比赛时忘记可以输出0水分。

一棵树(m=n-1)的时候很好做,就不说了。当m>n时,n个方程解大于n的未知数,一定有无穷多解。

所以我们只需讨论m=n的情况。此时图为一个环套树。对于每一个子树,我们按m=n-1时的做法做就可以了。那么剩下的就是一个环。

对于这个环,我们可以列出t个方程(t表示环的大小):

a1=bt+b1

a2=b1+b2

a3=b2+b3

......

at=b(t-1)+bt

a表示点的权值(已知),b表示边的权值(我们要求的)。

接下来我们把奇数式子的和减偶数式子的和,可以发现当t为偶数时有无穷多解,t为奇数时最终得出的式子为2*bt=sum,sum为a的和,已知。

那么我们可以通过求出bt来求出剩下的所有边权。

 

总结:1、当题目出现-1、无解这些答案时,可以考虑水分

2、做题时不单止要想方向,还要想一些简单性质。

 

T3:二分答案,枚举可能的区间,网络流判断即可。

你可能感兴趣的:(【NOIP提高组】模拟A组)