排位赛Ⅱ H

H. I Would Walk 500 Miles

题目链接
题目大意:
将N头牛分成K组,要求你求出任意两组牛中任意两头牛能相遇的最短距离M。已知两头牛x和y愿意走去看对方的距离是
(2019201913x+2019201949y) mod 2019201997(x<y),
问M是多少(M尽可能大)。
思路:
题目意思就是求最小值的最大值。
这是有规律可循的,比如编号越小的牛与同一编号的牛的距离M就越大,即两头牛的编号越小,M就越大,利用这一规律,我们可以把牛这样子分组,前k-1头牛分成一头牛一组,剩余的牛为一组,这样子第k-1头牛与第n头牛的组合的M就是所有组合里面最小的,并且也是分成k组的所有方案中,M最大的一个。
代码:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
const ll x1=2019201913;
const ll x2=2019201949;
const ll mod=2019201997;
int main(){
	ll n,k;
	cin>>n>>k;
	ll c=k-1;
	printf("%lld\n",(c*x1+n*x2)%mod);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值