H. I Would Walk 500 Miles

H. I Would Walk 500 Miles

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;
} 

 

猜你喜欢

转载自www.cnblogs.com/studyshare777/p/12354269.html
今日推荐