I Would Walk 500 Miles (USACO Gold 2019 US Open)

I Would Walk 500 Miles (USACO Gold 2019 US Open)

这道题很有意思,下面这个解按官方题解说法是个漏洞,出题人没想可以这样直接用数学方式解。但既然看出来了数学解,不用又怎么好意思呢...

首先我们发现MOD=2019201997是一个质数。所以距离(2019201913x+2019201949y)mod2019201997(2019201913x+2019201949y) \mod 2019201997实际上就是:

MOD84x48y\text{MOD} - 84x - 48y

MM是两个cluster之间最小距离,也就是两个cluster中的最大值xx, yy (x<yx < y)对应的上述值。

要最大化MM,意思就是需要让两两cluster最大值的组合都尽量小,有一个值跑不掉,就是NN,但其它的cluster都是可以尽量小的办法就是把大的值都放在NN所在的cluster,这样剩下的值才能比较小,所以最优的分布很简单,就是:12...K1K...N1 | 2 | ... | K-1 | K ... N, 这时候MM就是:

MOD84(K1)48N\text{MOD} - 84(K-1) - 48N

我们检查一下,NN最大为75007500,所以84(K1)+48N84(K-1)+48N远小于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;
}