#数位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 国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的 ...
随机推荐
- 【Android逆向】frida hook so 函数
1. apk来自52pojie 链接:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ 密码:u1an 2.apktool反编译apk,拿到so文件 ja ...
- macOS使用CodeRunner快速配置fortran环境
个人网站:xzajyjs.cn 由于一些项目的缘故,需要有fortran的需求,但由于是M1 mac的缘故,不能像windows那样直接使用vs+ivf这种经典配置.搜了一下网上主流的跨平台方案,主要 ...
- 【LeetCode链表#6】移除链表元素
移除链表元素 题目 力扣题目链接(opens new window) 题意:删除链表中等于给定值 val 的所有节点. 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 ...
- 【Azure 应用服务】Function App / App Service 连接 Blob 报错
问题描述 因 Blob 启用了防火墙功能,但是当把App Service 或 Function App的出站IP地址都加入到Blob的白名单中,为什么访问还是403错误呢? 问题解答 Azure St ...
- 面试官:说说SSO单点登录的实现原理?
单点登录(Single Sign-On, SSO)是一种让用户在多个应用系统之间只需登录一次就可以访问所有授权系统的机制.单点登录主要目的是为了提高用户体验并简化安全管理. 举个例子,您在一个大型企业 ...
- CSP 2023 My Codes
T1 小苹果 题目描述 小 Y 的桌子上放着 \(n\) 个苹果从左到右排成一列,编号为从 \(1\) 到 \(n\). 小苞是小 Y 的好朋友,每天她都会从中拿走一些苹果. 每天在拿的时候,小苞都是 ...
- 6 定时器 &中断管理&资源管理
生成函数 周期,多久触发一次定时器(从定时器启动开始计算) 触发什么呢? 回调函数被调用,被谁调用呢 1,tick中断去调用timer函数 Linux中使用这个 (定时器回调函数若执行时间过长, ...
- Selenium IDE 自动化测试 bug 会在console里面出 DevTools failed to load SourceMap 很不好,用完记得关掉这个程序
Selenium IDE 自动化测试 bug 会在console里面出 DevTools failed to load SourceMap 很不好,用完记得关掉这个程序
- C++数值类型与string、CString之间的转换
目录 数值范围 数值类型与string互相转换 数值类型转换为string 使用函数模板+ostringstream 使用标准库函数std::to_string() string转换为数值类型 使用函 ...
- 【stras-one】星念漫画下载器
原文链接:[stras-one]星念漫画下载器 - Stars-One的杂货小窝 一款将在线漫画保存到本地的下载工具 应一位蓝奏云批量下载器的用户的要求,实现了这款漫画下载的工具开发, 一直没时间,鸽 ...