当前位置:   article > 正文

缺失的数据范围 2018中国大学生程序设计竞赛-女生专场_ccpc2018-hangzhou-problemset 测试数据

ccpc2018-hangzhou-problemset 测试数据
不难发现随着 n 的增大,na (⌈log2 n⌉)b 的值不会减小,反之亦然。二分查找最大的满足 na (⌈log2 n⌉)b 不超过 k 的 n 即可。 有两点需要注意:

• 乘法可能溢出 64 位整数,需要特殊处理。 

• 求 ⌈log2 n⌉ 时不应使用实数计算,这将带来误差,应当使用整数计算。 时间复杂度 O(log2 k)。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. #define Max int(1e9+1)
  5. int t,a,b;
  6. ll k;
  7. inline ll mul(ll a,ll b){
  8. if(!a||!b)return 0;
  9. if(a>(k+5)/b)return k+5;
  10. a*=b;
  11. return a>k+5?k+5:a;
  12. }
  13. inline ll getpow(ll a,int b){
  14. ll t=1;
  15. while(b--)t=mul(t,a);
  16. return t;
  17. }
  18. inline int getlog(ll n){
  19. ll o=n;
  20. while(o%2==0)o/=2;
  21. int t=0;
  22. while(n>1)n/=2,t++;
  23. if(o>1)t++;
  24. return t;
  25. }
  26. ll computer(ll n)
  27. {
  28. return mul(getpow(n,a),getpow(getlog(n),b));
  29. }
  30. int main()
  31. {
  32. scanf("%d",&t);
  33. while(t--)
  34. {
  35. scanf("%d%d%lld",&a,&b,&k);
  36. ll le=2,ri=k,mid,ans=1;
  37. while(le<=ri)
  38. {
  39. mid=(le+ri)/2;
  40. if(computer(mid)<=k)
  41. {
  42. ans=mid;
  43. le=mid+1;
  44. }
  45. else
  46. ri=mid-1;
  47. }
  48. printf("%lld\n",ans);
  49. }
  50. }
比赛的时候看着大佬们都AC了,心里万分焦急,想想自己16、17女生赛的题都没有补就去比赛,想想自己也是可笑,不知道哪里的勇气觉得自己可以AC。恩,以后要开始注重补题这一环节了
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/443310
推荐阅读
相关标签
  

闽ICP备14008679号