#数位dp,高精度#洛谷 2235 [HNOI2002]Kathy函数
分析
首先这个\(f\)函数其实求的是二进制下的回文数,简单证明一下
设\(n\)在二进制下的回文数为\(n'\),第一二条显然
第三条\(f(2n)=f(n)\Rightarrow \overline {0} n'=n'\),很好证明
第四条\(f(4n+1)=2f(2n+1)-f(n)\Rightarrow \overline {10}n'=\overline{1}n'\overline{0}-n'=\overline{10}n'\)
第五条
\]
\]
得证,对于位数小于\(n\)的位数答案,易求
对于位数等于\(n\)的位数的答案,特判\(n\)是否为回文数
给出一个伪代码
inline bool mxcheck(lll m,lll len){
rr int j=len/2,i=len-j-1;
for (;i>=0&&j<len;--i,++j){
if (((m>>i)&1)>((m>>j)&1)) return 1;
if (((m>>i)&1)<((m>>j)&1)) return 0;
}
return 1;
}
signed main(){
scanf("%lld",&m);
for (len=1,n=1;n<m;++len,n=n<<1|1)
ans+=1ll<<((len-1)/2);
ans+=(m&(n>>1))>>(len>>1);
if (mxcheck(m,len)) ++ans;
printf("%lld\n",ans);
}
改成高精度就可以A了
代码
#include <cstdio>
#include <cctype>
#define rr register
#define mod 1000000000
using namespace std;
int len,Ans,a[351],ans[351],Q[101],Qlen;
inline void add_one(int *a,int now,int &len){//在二进制的某一位加1
for (;a[now];++now) a[now]=0; a[now]=1;
if (now>=len) len=now+1;
}
inline bool mxcheck(){
rr int j=len/2,i=len-j-1;
for (;i>=0&&j<len;--i,++j)
if (a[i]!=a[j]) return a[i]>a[j];
return 1;
}
inline void innput(){
rr char c=getchar();
for (;!isdigit(c);c=getchar());
for (;isdigit(c);c=getchar()){
rr int w=c^48,t=0;
if (len){
len+=3;
for (rr int j=len-1;~j;--j){
a[j]=0;
if (j>=3&&a[j-3]) add_one(a,j,len);
if (j>=1&&a[j-1]) add_one(a,j,len);
}
}
for (;w;w>>=1,++t) if (w&1) add_one(a,t,len);
}
}
signed main(){
innput();
for (rr int i=0;i<len-1;++i)
add_one(ans,i>>1,Ans);
for (rr int i=len/2,j=0;i<len-1;++i,++j)
if (a[i]) add_one(ans,j,Ans);
if (mxcheck()) add_one(ans,0,Ans);
for (rr int i=Ans-1;~i;--i){//将二进制转换为十进制
rr int g=0;
for (rr int j=0;j<Qlen;++j){
rr int s=Q[j]*2+g;
g=s/mod,Q[j]=s%mod;
}
if (g) Q[Qlen++]=g;
g=ans[i]; rr int t=0;
for (;g;++t) g=(++Q[t])/mod;
if (t>Qlen) Qlen=t;
}
printf("%d",Q[Qlen-1]);
for (rr int i=Qlen-2;~i;--i) printf("%09d",Q[i]);
return 0;
}
#数位dp,高精度#洛谷 2235 [HNOI2002]Kathy函数的更多相关文章
- 洛谷P2235 [HNOI2002]Kathy函数
传送门 题解 // luogu-judger-enable-o2 //minamoto #include<cstdio> #include<cstring> using nam ...
- bzoj 1223: [HNOI2002]Kathy函数 数位DP 高精度
1223: [HNOI2002]Kathy函数 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 207 Solved: 90[Submit][Stat ...
- 【线型DP】洛谷P2066 机器分配
[线型DP]洛谷P2066 机器分配 标签(空格分隔): 线型DP [题目] 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配 ...
- 洛谷 P3742 umi的函数
传送门 思路 \(loceaner\)已经蔡虚鲲到连红题都不会做了 因为有\(special\ judge\)所以我们就可以瞎搞了! 由题目可知,只要有一个\(y[i] > x[i]\)则一定没 ...
- 【SPOJ 2319】 BIGSEQ - Sequence (数位DP+高精度)
BIGSEQ - Sequence You are given the sequence of all K-digit binary numbers: 0, 1,..., 2K-1. You need ...
- Tarjan+树形DP【洛谷P2515】[HAOI2010]软件安装
[洛谷P2515][HAOI2010]软件安装 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得 ...
- 状压DP 【洛谷P3694】 邦邦的大合唱站队
[洛谷P3694] 邦邦的大合唱站队 题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶 ...
- DP练习题——洛谷P1970花匠
目录 题目描述: 输入输出格式: 输入格式: 输出格式: 输入输出样例: 输入样例: 输出样例: 题目分析: 解法一: 解法二: 结语: 题目描述: 洛谷\(P1970\) 花匠栋栋种了一排花,每株花 ...
- 【模板】矩阵快速幂 洛谷P2233 [HNOI2002]公交车路线
P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...
- 「树形DP」洛谷P2607 [ZJOI2008]骑士
P2607 [ZJOI2008]骑士 题面: 题目描述 Z 国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的 ...
随机推荐
- 一次nginx返回422状态码的经历
故事背景 后端使用Docker Compose部署一个代码片段管理应用:snibox,某天因为云服务卡死重启之后再次访问时,登录或退出都返回422状态码. 界面提示如下: 不过奇怪的是:直接通过IP+ ...
- Aop @AfterReturning因返回类型不一致导致无法执行切面代码
要做返回异常之后,所有操作回滚的操作,本来想着泛型用 Object 就表示所有返回类型是 CommonResult 并且加指定注解的都走这个通知的代码,但是如下配置,无论如何也不生效 进入源码里发现, ...
- 国内如何快速访问GitHub
1.国内如何快速访问gibhub -FQ的方法无非就是用软件,这种就不介绍了 -本次介绍的是修改本地系统主机hosts文件,绕过国内dns解析,达到快速访问github 打开https://tool. ...
- 深入理解String
深入理解String String是Java中的一个类,是一个引用类型,用于表示字符串.它是不可变的(immutable),即一旦创建,其值就不能被修改.任何对String对象的修改操作都会创建一个新 ...
- 10、zookeeper客户端curator
curator介绍 https://blog.csdn.net/wo541075754/article/details/68067872 关于第三方客户端的小介绍 zkClient有对dubbo的一些 ...
- vscode 格式化 vue 和 js代码 vetur prettier beautify
这个文档 不涉及eslint 只专注自动格式化 格式化个性化需求: js中 自动去分号 js中 双引号变单引号 最大空换行数 是2 vue template中 属性自动折行 vue 的自动格式化 需要 ...
- Java GUI swing 可执行程序 jar (java -jar)idea
创建项目 可以用maven idea设置 into 那个 参考资料 Java 基础 https://www.liaoxuefeng.com/wiki/1252599548343744/12604545 ...
- linux环境下基于python的OpenCV 保存视频
一 概念 在OpenCV中保存视频使用的是VedioWriter对象,在其中指定输出文件的名称, A 创建视频写入的对象 out = cv2.VideoWriter(filename,fourcc, ...
- 基于TLSR8359的2.4G私有协议多发一收方案解析
一 简析 1.简介 泰凌微的2.4G私有协议芯片在市场应用十分广泛. 2.特性 无线传输距离远 功耗低,接口丰富 自带mcu功能,可实现mcu+2.4G的私有功能 二 源码解析 1.原理图 框图如下所 ...
- 26_H.264编码实战
目录 使用FFmpeg命令进行H.264编码 使用FFmpeg代码实现H.264编码 1.获取编码器 2.创建上下文 3.打开编码器 4.创建 AVFrame 5.创建 AVPacket 6.打开文件 ...