标签:二分 10 题意 int 题解 ll mid 640 Div
C. K-th Not Divisible by n
题意
给你一个 n 和 k。
设存在唯一的一个数 \(m\) ,满足 前 \(m\) 个数中有 \(m-k\) 个可以被 \(n\) 整除的数。
如样例:\(n=3, k=7\) ,则答案为 \(m=10\), \(10/3 == 10-7\)
解题思路
由题意可得到一个二分答案的条件:\(m\) 满足:\(m-(m÷n)=k\) 所以说,我们可以二分这个m,范围为 \([0, {10}^{10}]\)(范围胡扯的,没确定范围,就拉满了)
手写二分的话,是枚举第一个大于等于条件的值
AC代码
#include <iostream>
using namespace std;
typedef long long ll;
int solve ( void )
{
ll n, k;
cin >> n >> k;
ll l = 0, r = 1e10;
while ( l < r )
{
ll mid = l + r >> 1;
if ( mid - mid / n >= k ) r = mid;
else l = mid + 1;
}
return r;
}
int main ( void )
{
int T;
cin >> T;
while ( T-- ) cout << solve() << endl;
return 0;
}
放心。不会超时的。
这是二分写法,还有推公式写法,我数学蒟蒻,就不自残脑细胞了
标签:二分,10,题意,int,题解,ll,mid,640,Div 来源: https://www.cnblogs.com/judezhang/p/14608180.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。