第一场牛客多校真的稀碎。。
link
A.SG暴力打表
B.简单初中计算几何
E.签到
F.规律题 显然多于100就没可能有不符合条件的了,但是也可以数位dp.这个数位dp挺复杂的(我太菜了。。。)。
\(dp[pos][sum][sta][flag][limit][lead]\)
- pos 为 位置 pos <= 20
- sum 是 直到现在的所有数的和%3 sum <= 2
- sta 是 不同的sum之前是否出现过 因为sum只可能为0,1,2 sta最大为111B = 7. sta状压存数据
- flag 是 直到现在是否满足条件 0 or 1
- limit lead 经典状态
ll dfs(int pos, int sum, int sta, int flag, int limit, int zero)
{
if (pos < 0) {
return flag;
}
if (!limit && dp[pos][sum][sta][flag][limit][zero] != -1)
return dp[pos][sum][sta][flag][limit][zero];
int up = limit ? x[pos] : 9;
ll tmp = 0;
for (int i = 0; i <= up; i++) {
int new_zero = (zero || i != 0);
int new_sum = (sum + i) % 3;
int new_flag = flag;
if (new_sum == 0) {
if (new_zero == 1)
new_flag = 1;
} else if ((1 << new_sum) & sta) {
new_flag = 1;
}
int new_sta = (sta | (1 << new_sum));
tmp += dfs(pos - 1, new_sum, new_sta, new_flag, limit && x[pos] == i, new_zero);
}
if (!limit)
dp[pos][sum][sta][flag][limit][zero] = tmp;
return tmp;
}
H.正解FFT. 暴力优化竟然也行。。。
晚上还有场tourist出的div1 + div2 22:35 - 1:35 wu 苦露西
开始学dp了,明天学背包 01背包 多重背包 分组背包 依赖背包 背包路径打印 最优方案数 etc...
苦露西~~