https://codeforces.com/group/5yyKg9gx7m/contest/269908/problem/H
题目描述:
用一个公式计算2头牛间的路径:(2019201913 * x+2019201949* y) %2019201997 (x<=y)。
把奶牛们分成k个组。不同组间任意2头牛的最短路径为M。
你可以任意分组,使得M尽可能大,问M最大为多少。
分析:
把1~n代入x和y,可以发现y不变时x越小,路径越大。x不变时y越小,路径越大。所以任一x与n组合,可以得到最小的值M。因为是分成2组以上的,所以n一定会与其中一个数x组合,得到M。当x=1时组合得到的数最大,x=2,3......时依次减小。我们要M尽可能大,就要x尽可能的小。
要分成K组,其中有一组是包含n的。剩下k-1组,我们要把它填满,而且要n与尽可能小的x组合,那么只能依次把1,2,3......k-1分别填入这些组。这样M就是k-1与n组合的数。
代码:
#include <stdio.h> #include <cstring> #include <algorithm> #include <cstring> #include <vector> #include <iostream> using namespace std; typedef long long ll; int n,k; ll count(ll x) { return (2019201913*1LL*x+2019201949*1LL*n)%2019201997; } int main() { cin>>n>>k; printf("%lld\n",count(k-1)); return 0; }
原文:https://www.cnblogs.com/studyshare777/p/12354269.html