核心内容摘要
《和平之上》韩漫网页版:沉浸式体验,点燃你的热血与激情
幂次进近时间限制2秒 空间限制256M网页链接牛客tracker牛客tracker 每日一题完成每日打卡即可获得牛币。
获得相应数量的牛币能在【牛币兑换中心】换取相应奖品助力每日有题做丰盈牛币日益多题目描述给定t tt次询问每次询问给出两个正整数n nn和k kk。
请你找到最小的正整数m mm使得n − m k n−m^kn−mk的绝对值最小。
输入描述第一行有一个整数t ( 1 ≤ t ≤ 10 5 ) t ( 1≤t≤10^5 )t(1≤t≤
。
随后t tt行每行两个整数n , k ( 1 ≤ n , k ≤ 10 18 ) n,k ( 1≤n,k≤10^{18} )n,k(1≤n,k≤
。
输出描述输出t tt行每行一个正整数m mm。
示例1输入3 6 2 1 1 78 3输出2 1 4示例2输入3 114 514 1000000000 2 1000000000000000000 3输出1 31623 1000000解题思路本题利用幂函数单调递增、绝对值代价函数呈单峰分布的特性采用三分查找高效求解最优解先定义快速幂函数计算m mm的k kk次幂再构建代价函数f ( u ) f(u)f(u)统计n nn与u k u^kuk的绝对差值以1 11为左边界、2 e 18 2e182e18开k kk次方为右边界搭建查找区间通过三分法不断缩小区间范围至仅剩连续3 33个数值最后遍历该区间内所有数值对比代价大小选取对应最小代价的正整数m mm作为答案该方案规避了暴力枚举的低效问题单次查询时间复杂度极低完美适配t ≤ 1 e 5 t≤1e5t≤1e5次查询且n 、 k n、kn、k上限达1 e 18 1e181e18的大数据场景精准满足题目求最小绝对值对应m mm的核心需求。
代码内容#includebits/stdc.husingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefpairll,llpii;constll p1e97;constll N1e610;ll n,k;llksm(ll a,ll b){ll res1;while(b){if(b