2020_CCPC长春L题 Coordinate Paper Exgcd贪心
2020 CCPC Changchun gym102832L
题意
链接:点我点我
你需要构造出一个长度为 \(n\) 的序列满足以下三个条件:
- \(a_i\ge 0\)
- \((\sum_{i=1}^na_i)=s\)
- 对于任意 \(i\ge 2,\; a_i=a_{i-1}+1\) 或者 \(a_i=a_{i-1}-k\)
\(1\le n,k\le 1e5,1\le s\le 1e18\)
思路
首先假设当 \(i\ge 2\) 的时候恒定有 \(a_i=a_{i-1}+1\) 成立,现在需要选出几个特殊的下标 \(i\) 令 \(a_i=a_{i-1}-k\) ,其他下标依然满足 \(a_i=a_{i-1}+1\) 。
如果第 \(i\) 个数转为特殊下标的话,序列的权值和会减少 \((n-i+1)*(k+1)\) .
修改操作只会让序列权值和减少,如果初始时一定要保证序列权值和大于等于 \(s\) 才行。
所以初始 \(a_1\) 至少等于最小的非负整数 \(ansL\) 满足 \(\frac {(a_1+a_1+n-1)*n}{2}\) 大于等于 \(s\) ,令 \(c=\frac {(a_1+a_1+n-1)*n}{2}-s\) .
如果 \(c=0\) 直接输出解即可。
所以现在只有两种操作:
- \(a_1=a_1+1\) ,权值和加 \(n\) ;
- 选择一个 \(i(2\le i\le n)\) ,令 \(a_i=a_{i-1}-k\) ,权值和减少 \((n-i+1)*(k+1)\) 且每个 \(i\) 只能被选中一次。
求出一组合法解 \((a,b)\) 满足 \(c+b*n = (k+1)*a\) 且 \(a\le \frac {n*(n-1)}2\) 即可。
使用扩展欧几里得求出 \(a\) 的最小非负整数解即可还原出整个数组来,但是要满足 \(a_i\le 0\) 。
又因为最小非负整数解是一组通解,所以我还可以得到任意多组解,包括 \(a\) 的次小非负整数解。
实测只需要使用 \(a\) 的最小非负整数解和次小非负整数解即可通过本题。
使用 \(a\) 还原数组的过程就是尽可能选择小的下标进行操作2。
AC_CODE
点我点我
My approach to 2020 Changchun by Shanghai JTU Problem L is as follows: