E的非主流做法(

首先有一个结论:凑不出来的数形如 i*a-j*b 其中 i<b、j>0、i*a-j*b>0
二分答案,考虑大于等于 mid 的数中,有多少个凑不出来的
我们可以枚举i,计算使得 i*a-j*b>=mid 的 j 有多少个
有个比较有用的显然的优化:如果当前已经有大于等于 k 个这样的数了,就不用继续枚举 i 了
另一个比较有用的显然的优化:我们取 a>b
借助这两个优化,我们可以证明,单次check的复杂度是 sqrt(k) ,证明如下:
对于同一个 mid , i 取 x+1 时符合条件的 j 至少比 i 取 x 时多 1 个,所以我们枚举 y 个 i 时,至少会得到 y2/2 个 j
所以我们每次check最多只需要枚举 sqrt(k) 个 i
总时间复杂度 o(log(a*b)*sqrt(k)) ,(跑的飞快
#include<bits/stdc++.h>
using namespace std;

long long a,b,k;

bool ok(long long x)
{
	int y=k;
	long long gg=(b-1)*a-b-x;
	while(gg>=0)
	{
		y-=gg/b+1;
		if(y<=0)
			return 1;
		gg-=a;
	}
	return 0;
}

int main()
{
	long long l,r,mid;
	scanf("%lld%lld%lld",&a,&b,&k);
	if(a<b)
	{
		a^=b;
		b^=a;
		a^=b;
	}
	l=1,r=a*b;
	while(l!=r)
	{
		mid=(l+r+1)/2;
		if(ok(mid))
			l=mid;
		else
			r=mid-1;
	}
	printf("%lld\n",l);
	return 0;
}


全部评论
大佬可以帮蒟蒻看个代码吗。。过不了我感觉思路死对的,已经卡半天了。。 这是A题😭
2 回复 分享
发布于 2021-05-22 11:46

相关推荐

04-16 10:27
已编辑
美团_Saas_后端开发
今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,拿到美团offer那会感觉自己天都亮了。没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
大愣子衰哥:老哥,是正式还是实习
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务