C/C++教程

AGC021

本文主要是介绍AGC021,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

AGC021

做了一下 AGC021 这套题,感觉很厉害,纪念一下,题意就不放了。

A

自己想出来了,就枚举每一位,然后后面的位可以都是 \(9....\) 之类的,前面可以卡的死一点。

B

你就考虑,既然他这个圆这么离谱,那一看起来就和这个东西没啥关系啊。

显然只有凸包上的点才有可能有答案诶。

然后维护一下凸包,求一下每个点占据的弧度即可。

求凸包写挂了,注意不能加等号。

C

傻逼构造不想说话,傻逼

D

设 \(f[l][r][k]\) 表示我用了 \(k\) 次转移字符,然后就考虑,直接按照区间dp的方式转移即可。

如果 \(s[i] == s[j]\) 那么转移 \(dp[i + 1][j - 1][k]+2 \to dp[i][j][k]\)

否则转移 \(dp[i + 1][j - 1][k - 1]+2\to dp[i][j] [k]\)

然后还有就是,\(dp[i + 1][j][k]\to dp[i][j][k]\)

还有 \(dp[i][j + 1][k]\to dp[i][j][k]\)

E

这题蛮有意思的!。

我们考虑枚举红色球的数量设为 \(R\),然后此时蓝色球的数量为 \(B\)。然后捏,我们就考虑,如果 \(R<B\) 肯定不能成为答案。

如果 \(R=B\) 的情况,这时候肯定蓝色球最后一个放,那么等于少一个蓝色球的情况。

然后只用考虑 \(R>B\) 的情况。就考虑,如果 \(R- B \ge N\) 的话,那么肯定是每个变色龙都可以成为红色,因为可以给每个变色龙多一个红色球。这时候的方案数应该是 \(\binom{R+B}{R}\) 就随便一个序列都可以啦。

然后考虑如果 \(B<R<N\) 的情况,那么应该有 \(N-(R-B)\) 的变色龙的蓝色和红色球是一样的。那么肯定是可以从合法序列中分出来 \(N-(R-B)\) 个合法的 RB 序列,这时候还剩下最多 \(B-(N-(R-B))=R-N\) 个球,然后也就是说,对于序列的每个前缀,蓝色球不多于红色的个数 \(R-N\)。

那么,我们考虑容斥掉不合法的方案,如果不考虑限制,应该是从 \((0,0)\) 这个点走到 \((R,B)\) 的方案数。我们要求 \(y\le x + R - N\)。也就是说,始终要满足点在 \(y=x+R-N+1\) 这条线下,考虑容斥掉不合法的方案,就是说,我们考虑第一次越过这条线的方案,对于他进行翻折,设点为 \((t,t+R-N+1)\),然后就是剩下 \((R-t,B-t-R+N-1)\),然后反转 \((B-t-R+N-1,R-t)\),然后拼起来,就是 \((B-R+N-1,2R-N+1)\),然后就是说,这时候的方案就是 \(\binom{R+B}{R}-\binom{R+B}{2R-N+1}\)。

F

更有意思了,明天再来更这个题解。要睡觉了。

这篇关于AGC021的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!