博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5936 折半枚举法
阅读量:3951 次
发布时间:2019-05-24

本文共 1141 字,大约阅读时间需要 3 分钟。

kk说是16年CCPC杭州赛的银牌题

给定 x , K ( x < 1 0 9 , 1 ≤ K ≤ 9 ) x,K(x<10^9,1≤K≤9) x,K(x<109,1K9)求满足 x = f ( y , K ) − y x=f(y, K)-y x=f(y,K)y的所有正整数y的数量。

f ( y , K ) = ∑ z  in every digits of  y z K ( f ( 233 , 2 ) = 2 2 + 3 2 + 3 2 = 22 ) f(y, K)=\sum_{z \text { in every digits of } y} z^{K}\left(f(233,2)=2^{2}+3^{2}+3^{2}=22\right) f(y,K)=z in every digits of yzK(f(233,2)=22+32+32=22)

  1. 定y的范围, y < 1 0 10 y<10^{10} y<1010
  2. 由于每个数字对f的贡献独立,所以可以折半求解。令 y = 1 0 5 ∗ a + b y=10^5*a+b y=105a+b,则 x − ( f ( a , K ) − 1 0 5 ∗ a ) = f ( b , K ) − b x-(f(a,K)-10^5*a)=f(b,K)-b x(f(a,K)105a)=f(b,K)b。先求出1e5以内所有的 f ( b , K ) − b f(b,K)-b f(b,K)b,然后进行枚举高5位a, v a l = x − ( f ( a , K ) − 1 0 5 ∗ a ) val=x-(f(a,K)-10^5*a) val=x(f(a,K)105a),二分查找对应的 f ( b , K ) − b f(b,K)-b f(b,K)b的数量。
  3. 注意:当 x = 0 x=0 x=0时,会把0算进去。题目求正整数,减去1。
#include
#define endl '\n'using namespace std;#define debug(_x) cout<<#_x<<": "<<_x<
>=1; } return res;}void init(){
int e5=100000; for(int j=1;j<=9;++j){
for(int i=1;i
>T; for(int casei=1;casei<=T;++casei){
cin>>x>>k; cout<<"Case #"<
<<": "<

转载地址:http://ggkzi.baihongyu.com/

你可能感兴趣的文章
大数据下的帝都魔都的爱恨情仇
查看>>
GitHub最著名的20个Python机器学习项目!
查看>>
小白都能看懂的神经网络入门,快收下吧~
查看>>
当白帽黑客遇到了网络诈骗,他是如何套路并反制骗子的?
查看>>
手把手教你36小时搭建无人超市系统 !(附代码)
查看>>
2017新生儿爆款名字出炉!90后的父母们最受欢迎的居然是.....
查看>>
全景图解高铁数据,谁是最有潜力的高铁城市?
查看>>
张小龙现场“约战”跳一跳,发布2018微信全新计划(内附演讲全文)
查看>>
爬取电影天堂的最新电影
查看>>
运维总监不会告诉你这些有趣但鲜为人知的 Linux 命令
查看>>
2017新浪微整形年度大数据报告
查看>>
实战 | 用 Python 选股票,据说可以多挣个20%
查看>>
重磅 | 数据挖掘之父韩家炜:文本语料库的数据挖掘(附视频+PPT下载)
查看>>
白话AI:看懂深度学习真的那么难吗?初中数学,就用10分钟
查看>>
超全的 Linux 机器的渗透测试命令备忘表,共16表128条命令
查看>>
代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton
查看>>
教你用Java来玩答题(百万英雄/冲刺大会等)
查看>>
用Python做跳一跳外挂太浪费了,这种技能让你目瞪口呆
查看>>
如何在Python中快速进行语料库搜索:近似最近邻算法
查看>>
比特币这么火热,看看这篇比特币初学者指南
查看>>