#数位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 国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的 ...
随机推荐
- SQL Server初体验
概述 基于SQL Server 2019 Developer免费版搭建一个本地的开发环境. 下载安装 安装文件下载地址:https://www.microsoft.com/zh-cn/sql-serv ...
- [超实用插件]在Visual Studio中查看EF Core查询计划
前言 EF Core是我们.NET开发中比较常用的一款ORM框架,今天我们分享一款可以直接在Visual Studio中查看EF Core查询计划调试器可视化工具(帮助开发者分析和优化数据库查询性能) ...
- context讲解
context包 context包介绍 在go语言中,每个独立调用一般都会被单独的协程处理.但在处理一个请求时,往往可能需要在多个协程之间进行信息传递,甚至包括一层层地递进顺序传递,而且这种信息往 ...
- Golang标准库之bytes介绍
本次主要介绍golang中的标准库bytes,基本上参考了 字节 | bytes .Golang标准库--bytes 文章. bytes库主要包含 5 大部分,即: 常量 变量 函数 Buffer R ...
- mybatis批量插入的四种方式
一.循环插入 public void insert(List<User> userList) { userList.forEach(user -> userDao.insert(us ...
- iview select 下拉 多选 数组 外面包一层 数组改逗分,外层不能用v-model 要用 :value @input,input里面要把对象解构下,才能过验证 - vue
iview select 下拉 多选 数组 外面包一层 数组改逗分,外层不能用v-model 要用 :value @input,input里面要把对象解构下,才能过验证 - vue
- python parser 实例解析
一 parser: 该模块为Python的内部解析器和字节码编译器提供了一个接口.该接口的主要目的是允许Python代码编辑Python表达式的分析树并从中创建可执行代码. 这比试图将任意Python ...
- 三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析
三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析 三维模型的轻量化压缩是一项技术挑战,特别是在处理复杂的3DTile格式时.下面列举了一些处理过程中可能遇到的常见问题以及相应的处理方法: ...
- npm create vue@latest 执行过程
1. 引言 目前(2024年3月13日),打开Vue的官网,可以发现其推荐新建一个Vue项目的命令是npm create vue@latest,为啥这句命令就可以创建一个Vue项目呢 2. 执行过程 ...
- 记录--优雅解决uniapp微信小程序右上角胶囊菜单覆盖问题
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 大家好,今天聊一下在做uniapp多端适配项目,需要用到自定义导航时,如何解决状态栏塌陷及导航栏安全区域多端适配问题,下文只针对H5 ...