CF1068A 题解

修改日志

2022/11/52022/11/5:修改了分数格式。

思路

这题首先就先判断一下 mm 是否大于 nn,如果是,则输出 -1

为什么呢?

因为每个人最少买一枚纪念币,且因为每个纪念币都必须是不同的,所以会买 mm 种纪念币,而纪念币只有 nn 种,因为 mnm\le n,所以是不可能实现的。

考虑可能的最坏的情况,也就是所有人买的纪念币正好包含 Ivan 有的那 KK 个纪念币,因为还有保证至少有 LL 个是 Ivan 没有的,所以他们至少买 L+KL+K 个纪念币。

也就是说,他们每个人得买 (L+K)m\lceil\frac{(L+K)}{m}\rceil 个纪念币。

ans=(L+K)mans=\lceil\frac{(L+K)}{m}\rceil
最后再判断一下 ans×mans\times m 是否小于等于 nn,如果是,输出 ansans,否则,输出 -1

代码

#include<bits/stdc++.h>
using namespace std;
long long n,m,k,l,p,ans;
int main(){
	scanf("%lld%lld%lld%lld",&n,&m,&k,&l);
	if(n<m) return !printf("-1");
	p=k+l;
	ans=p/m;
	if(p%m!=0) ans++;
	if(n/m<ans)  return !printf("-1");
	return !printf("%lld",ans);
}

有错或疑问欢迎私信指出~

posted @ 2022-10-25 22:17  fengxiaoyi  阅读(18)  评论(0)    收藏  举报  来源