标签:Square QiuQiu 钦定 AGC036F leq 2n 部分 dp Constraints
题意
给一个整数\(n\), 求有多少排列\(P\)满足对于任意\(i\in [0, 2n - 1]\)满足\(n^2 \leq i^2 +P_i^2\leq (2n)^2\), 答案对一个数取模。
\(n \leq 250\)
题解
orz QiuQiu
考虑先处理出每个位置的上下界。
设\(L_i = \lceil\sqrt{n^2 -i^2}\rceil, R_i = min(2n - 1, \lfloor\sqrt{4n^2 - i^2}\rfloor)\), 显然\(L, R\)都是单调的。
对于单调的限制, 如果只有一维的话是经典的, 比如如果只有\(R\)这一维的话, \(ans = \prod_{i = 0}^{2n - 1} (R_i + 1 - (2n - i - 1))\)。
但是现在有两维, 一个想法就是钦定哪些位置在下面, 然后做dp, 但是这样的话会破坏有序性而导致贡献难以计算。
一个性质是你发现在\(i > n\)的时候, \(L_i\)都是\(0\), 在\(i < n\)的时候, \(L_i < n\)而\(R_i > n\), 于是\(L, R\)是不相交的, 所以给人一种可以分开算的感觉。
考虑把\([0, n - 1]\)的\(L\)和\([n, 2n)\)的\(R\)放一起排序, 那么对于\([n, 2n - 1]\)的部分只要考虑自己占的部分以及以及选了\(j\)个钦定位置即可。对于\([0, n - 1]\)的部分在取\(L - 1\)的时候也和差不多, 对于\([0, n - 1]\)取\(R\)的部分, 考虑\([n, 2n - 1]\)中的点在其前面, 还有\([0, n - 1]\)中间的按\(R\)会排在当前点前面的部分以及钦定了是\(L\)的部分, 然后dp就可以算恰好\(i\)个在下面的贡献了, 直接容斥算答案即可。
代码由于看了QiuQiu的就不放了(。
标签:Square,QiuQiu,钦定,AGC036F,leq,2n,部分,dp,Constraints 来源: https://www.cnblogs.com/clover4/p/15306468.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。