[bzoj1223] [HNOI2002]Kathy函数
首先由题解可得TAT,f(i)=i当且仅当i在二进制下为回文串。
那么问题就变成了1~n中有多少个二进制下的回文串。
把m转成2进制后就是正常的统计了= =。
f[i]表示二进制下,有多少个i位的回文串(包括前导0)。f[1]=f[2]=2,f[i]=f[i-2]*2.....也就是f[i]=2^((i+1)/2)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ri register int
using namespace std;
const int modd=;
char s[];
int two[][];
int a[],l[],len,len2,mp[],ten[];
int i,j,k,n,m;
int ans[],ansl; inline bool notsmall(int x){
if(l[x]!=len)return l[x]>len;
for(ri i=len;i;i--)if(two[x][i]!=a[i])return two[x][i]>a[i];
return ;
}
inline bool notbig(int x){
if(l[x]!=len)return l[x]<len;
for(ri i=len;i;i--)if(two[x][i]!=a[i])return two[x][i]<a[i];
return ;
}
inline void add(int x){
l[x]=l[x-];int y=x-;
for(ri i=;i<=l[x];i++){
two[x][i]+=two[y][i]<<;
if(two[x][i]>=modd)two[x][i]-=modd,two[x][i+]++;
}
if(two[x][l[x]+])l[x]++;
}
inline void addtoans(int x){
for(ri i=;i<=l[x];i++){
ans[i]+=two[x][i];
if(ans[i]>=modd)ans[i+]++,ans[i]-=modd;
}
while(ans[ansl+])ansl++;
}
inline void dec(int x){
for(ri i=;i<=l[x];i++){
a[i]-=two[x][i];
if(a[i]<)a[i]+=modd,a[i+]--;
}
while(!a[len]&&len>)len--;
}
inline void run(){
ri i,j,k,len;
two[][l[]=]=;
for(i=;!notsmall(i);)i++,add(i);
for(;i;i--)
if(notbig(i))dec(i),mp[i]=,len2=max(len2,i);
// for(i=len2;i;i--)printf(" %d",mp[i]);puts("");
for(i=;i<len2;i++)addtoans((i+)>>);
int flag=;
for(i=len2>>;i;i--)swap(mp[i],mp[len2-i+]);
for(i=;i<=len2&&flag;i++){
if(mp[i]){
if(i<=(len2>>))addtoans((len2-(i<<)+)>>);
else{
if(mp[len2-i+]==||len2-i+==i)addtoans();
}
}
if(i>(len2>>))flag&=(mp[len2-i+]==mp[i]);
}
if(flag==||len2==)addtoans();
}
int main(){
scanf("%s",s);j=strlen(s);
for(i=ten[]=;i<=;i++)ten[i]=ten[i-]*;
for(i=j-;i>=;i--){
if(!k)len++;
a[len]+=(s[i]-'')*ten[k];
k++;if(k>)k=;
}
run();
for(printf("%d",ans[ansl]),i=ansl-;i>;i--){
for(j=;j<modd;j*=)if(ans[i]<j)putchar('');
printf("%d",ans[i]);
}puts("");
return ;
}
代码又丑又慢>_<
[bzoj1223] [HNOI2002]Kathy函数的更多相关文章
- bzoj 1223: [HNOI2002]Kathy函数 数位DP 高精度
1223: [HNOI2002]Kathy函数 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 207 Solved: 90[Submit][Stat ...
- 洛谷P2235 [HNOI2002]Kathy函数
传送门 题解 // luogu-judger-enable-o2 //minamoto #include<cstdio> #include<cstring> using nam ...
- [HNOI2002] Kathy 函数
数位 DP 套路题,求二进制下区间内回文串个数. 设 dp[][][] 表示到第几位时,是否为回文数,去掉前导零后共几位.之后到边界时判断是否为回文数计入贡献. 一开始不知道答案统计要高精,于是后来就 ...
- 【题解】Kathy函数 [BZOJ1223] [P2235] [HNOI2002]
[题解]Kathy函数 [BZOJ1223] [P2235] [HNOI2002] 这几疯狂刷了数位\(dp\)的题,到这道题时被卡了一天,一看大佬的讲解发现居然是求回文数╮(╯_╰)╭ 感觉被大佬狠 ...
- 洛谷$P$2235 $Kathy$函数 $[HNOI2002]$ 数位$dp$
正解:数位$dp$ 解题报告: 传送门$qwq$ $HNOI$的题从02年就这么神了嘛$QAQ$,,, 嗷对了这题如果看出了一个结论就是个数位$dp$板子,,,?但是结论很神我$jio$得挺难看出来的 ...
- 数位DP学习笔记
数位DP学习笔记 什么是数位DP? 数位DP比较经典的题目是在数字Li和Ri之间求有多少个满足X性质的数,显然对于所有的题目都可以这样得到一些暴力的分数 我们称之为朴素算法: for(int i=l_ ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
排名函数是SQL Server2005新加的功能.在SQL Server2005中有如下四个排名函数: .row_number .rank .dense_rank .ntile 下面分别介绍一下这四个 ...
随机推荐
- 仿知乎app登录界面(Material Design设计框架拿来就用的TexnInputLayout)
在我脑子里还没有Material Design这种概念,就我个人而言,PC端应用扁平化设计必须成为首选,手当其冲的两款即时通讯旺旺和QQ早就完成UI扁平化的更新,然而客户端扁平化的设计本身就存在天生的 ...
- [Find the last digit when factorial of A divides factorial of B]
Given two numbers A and B. The task is to compute the last digit of the resulting F, where F= B! / A ...
- PHP随机函数【上】
随机函数应用的场景很多,比如验证码,token,订单号等.由浅入深了解常用随机函数 1.rand 常用的随机数字函数,默认生成[0,getrandmax()]之间的随机数(包括边界值),因性能问题已被 ...
- /sbin/nologin 和 /bin/false 的区别
/bin/false是最严格的禁止login选项,一切服务都不能用,而/sbin/nologin只是不允许系统login,可以使用其他ftp等服务 如果想要用false在禁止login的同时允许ftp ...
- 为什么说Python 是大数据全栈式开发语言
欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...
- csv文件转json
http://stackoverflow.com/questions/19766266/directly-convert-csv-file-to-json-file-using-the-jackson ...
- 使用svn 的解决 处理svn状态冲突
当直接只用版本浏览器进行svn的删除操作是,在客户端svn目录里,出现svn版本错误信息提示,使用 svn 解决命令,处理冲突保存 svn resolve --accept=working PATH( ...
- ES6(四)字符串的扩展
1.字符的表示方式 最早在 \u0000-\uFFFF 之间的字符已经足够使用吗,每个字符占两个字节,超出范围,必须使用双字节形式表达, 即每个字符占四个字节.超出范围的字符,会被解读成 \uXX ...
- 解决 react-router / react-router-dom v4 history不能访问的问题
今天我把react-router 升级了一下, 在使用react-router-dom 是,子组件使用this.props.history 找不到了,看看官方文档,找了半天也没找到,因为我是在异步执行 ...
- MicroPython-GPS教程之TPYBoardv702控制5110显示当前经纬度
一.关于TPYBoardV702 TPYBoardV702是目前市面上唯一支持通信定位功能的MicroPython开发板:支持Python3.0及以上版本直接运行.支持GPS+北斗双模定位.GPRS通 ...