I Would Walk 500 Miles (USACO Gold 2019 US Open)
这道题很有意思,下面这个解按官方题解说法是个漏洞,出题人没想可以这样直接用数学方式解。但既然看出来了数学解,不用又怎么好意思呢...
首先我们发现MOD=2019201997是一个质数。所以距离实际上就是:
是两个cluster之间最小距离,也就是两个cluster中的最大值, ()对应的上述值。
要最大化,意思就是需要让两两cluster最大值的组合都尽量小,有一个值跑不掉,就是,但其它的cluster都是可以尽量小的办法就是把大的值都放在所在的cluster,这样剩下的值才能比较小,所以最优的分布很简单,就是:, 这时候就是:
我们检查一下,最大为,所以远小于MOD,所以没有超出MOD范围的问题,我们直接输出上面公式的值,就是结果。
#include <bits/stdc++.h>
int n, K;
int main() {
scanf("%d %d", &n, &K);
printf("%lld", 2019201997LL - 84*(K-1) - 48*n);
return 0;
}