http://acm.hdu.edu.cn/showproblem.php?pid=6659

题意:给你d,x,让求满足f(d,n)=n的最大n(n<=x),其中f(d,n)表示数字d在从1到n的数中出现的总次数。

思路:网上真的是有一种神仙思路(找规律,推公式),显然如果f(d,x)=x那么答案就是x,否则让x -= max( 1 , abs(f(d,x)-x)/18 )然后再验,猛地一看感觉很不靠谱,x是1e18岂不是要爆掉?仔细一看abs(f(d,x)-x)和x的数量级是一样的。。(例如让d=1,x=500,一个500,一个100,至于还有个/18无所谓,因为x越大影响越不明显),这样循环次数就不会很多,/18因为f(d,n-1)和f(d,n)最多差18,然后算f(d,x)算是一个板子,就是依次算个位,十位,百位...

复杂度也会很低。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll cal(ll n,ll x){
ll cnt = ,k;
for(ll i=;k=n/i;i*=){
cnt += (k/)*i;
int cur = k%;
if(cur>x) cnt += i;
else if(cur==x) cnt += n-k*i+;
}
return cnt;
} int main(){
ios::sync_with_stdio();
cin.tie();
cout.tie();
int T;
cin>>T;
while(T--){
ll d,x;
cin>>d>>x;
while(){
ll num = cal(x,d);
if(num == x){
cout<<x<<endl;
break;
}
x -= max(1LL,abs(num-x)/);
}
}
return ;
}

最新文章

  1. Spring的测试
  2. 关闭Win10自带的 Windows Defender
  3. 你真的了解setTimeout和setInterval吗?
  4. 【jackson 异常】com.fasterxml.jackson.databind.JsonMappingException异常处理
  5. Linux下使用fdisk发现磁盘空间和使用mount挂载文件系统
  6. (四)CSS选择器和派生选择器
  7. C++ API设计
  8. win7 提升windows服务权限使非管理员用户可以控制windows服务的开启和关闭
  9. AD认证
  10. SQLSERVER 2008 R2版本密钥(摘)
  11. Java并发编程:并发容器ConcurrentHashMap
  12. POJ 1759 Garland(二分答案)
  13. 常系数齐次线性递推 &amp; 拉格朗日插值
  14. Ubuntu 远程 Jupyter 配置
  15. JQUERY-定义-查找
  16. mybatis 插入数据 在没有commit时 获取主键id
  17. 课程四(Convolutional Neural Networks),第三 周(Object detection) —— 0.Learning Goals
  18. JavaSE学习总结(十)—— JDBC与面向对象测试
  19. OpenShift Origin 基本命令
  20. TX2-static-dhcp-network

热门文章

  1. GStreamer基础教程06 - 获取媒体信息
  2. ue4使用SceneCapture2D创建小地图示例 蓝图
  3. [ PyQt入门教程 ] PyQt5基本控件使用:单选按钮、复选框、下拉框
  4. awk文本处理
  5. 【Java笔记】【Java核心技术卷1】chapter3 D5运算符
  6. 并发知识(2)——关于Thread
  7. 【TCP/IP】ICMP协议
  8. android ——活动的生命周期
  9. 洛谷 P1903 [国家集训队]数颜色
  10. 白话--长短期记忆(LSTM)的几个步骤,附代码!