AT_arc166_c [ARC166C] LU / RD Marking
这种类型的题(对脑电波题)有些题能秒,有些题想多久都想不出来。。。
显然本题能一起染黑的边存在某种关系,我们考虑一条边可以和哪两条边一起染色,乍一看如果还没看出来有什么性质,我们就考虑把连着的边再这样考虑一遍。
突然,灵光乍现!我们这样连可以连出来个斜线!也就是说我们可以将网格图拆开,分开讨论每一个斜线。我们把每个斜线拉直变成序列,发现这显然可以 dp 处理,设
然后我们再回到网格图,手玩一下就会发现分开的斜线含有的边的数量是一个类似分段函数的东西,不妨设
那么我们预处理出累乘的值,每次询问再用快速幂算出第二段的值就做完啦!
时间复杂度
代码:
int f[N][2], g[N];
signed main ()
{
f[0][0] = 1;
g[0] = 1;
rep (i, 1, N - 1) f[i][0] = (f[i - 1][0] + f[i - 1][1]) % P, f[i][1] = f[i - 1][0];
rep (i, 1, N - 1) if (i & 1) g[i + 1] = g[i - 1] * f[i + 1][0] % P;
int T = rd ();
for (; T; -- T)
{
int n = rd (), m = rd ();
if (n > m) swap (n, m);
printf ("%lld\n", g[n * 2] * g[n * 2] % P * qpow (f[n * 2 + 1][0], m - n) % P);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?