[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 下面分别介绍一下这四个 ...
随机推荐
- iOS学习——内存泄漏检查及原因分析
项目的代码很多,前两天老大突然跟我说项目中某一个ViewController的dealloc()方法没有被调用,存在内存泄漏问题,需要排查原因,解决内存泄漏问题.由于刚加入项目组不久,对出问题的模块的 ...
- Python学习日记:day8-------文件操作
文件操作 1,文件路径:d:\xxxx.txt 绝对路径:从根目录到最后 相对路径:当前目录下的文件 2,编码方式:utf-8 3,操作方式:只读,只写,追加,读写,写读...... ...
- iis 10 ftp 被动模式配置
第一步: 进入 Server Level 的FTP Firewall Support 第二步: 在 Data Channel Port Range 下配置 Passive mode 的端口号范围,注意 ...
- SSL/TLS通信
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/31 复习基本概念 对称密码:加密和解密使用同一密匙. 公钥密码: ...
- 使用requests爬取猫眼电影TOP100榜单
Requests是一个很方便的python网络编程库,用官方的话是"非转基因,可以安全食用".里面封装了很多的方法,避免了urllib/urllib2的繁琐. 这一节使用reque ...
- ArcGIS API for JavaScript 4.2学习笔记[29] 热点(密度)分析——以报警频率为例【使用Geoprocessor类】
这个就颇有插值分析的样子了.也可以说是密度分析.做出来就是一个热力地图的样子. 比如,人口密度,降雨分布等.这都可以由这个例子做出来类似的. 由于上一篇已经介绍过Geoprocessor类和Param ...
- application19事件 20多少步骤 具体20多少只有微软知道!!!
- ioutil包二
ioutil包二 (原创随笔,转载请注明出处 http://www.cnblogs.com/majianguo/p/8016426.html) ioutil包实现了一些I/O实用功能,导出了7个函数和 ...
- 豹哥嵌入式讲堂:ARM开发之文件详解(2)- linker文件
大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的linker文件. 在前一节课source文件详解里,豹哥给大家系统地介绍了source文件,source文件是嵌入式工程里典 ...
- Java中使用LocalDate根据日期来计算年龄
Java中和日期直接相关的类有很多,平时最常用到的就是java.util package下面的Date和Calendar,需要用到格式的时候还会用到java.text.SimpleDateFormat ...