[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 下面分别介绍一下这四个 ...
随机推荐
- 使用Libmicrohttpd搭建内嵌(本地)服务器
Libmicrohttpd简介 GNU Libmicrohttpd是一个用来在项目中内嵌http服务器的C语言库,它具有以下几个非常鲜明的特点: C语言库,小而快. API非常简单,且都是可重入的. ...
- Java之线程安全中的三种同步方式
一个程序在运行起来时,会转换为进程,通常含有多个线程. 通常情况下,一个进程中的比较耗时的操作(如长循环.文件上传下载.网络资源获取等),往往会采用多线程来解决. 比如,现实生活中,银行取钱问题.火车 ...
- scrapy框架第一章
操作环境:python2.7+scrapy 安装比较简单,网上教程也超多,就不在此赘述. 示例网站:https://www.cnblogs.com/cate/python/ (爬去关于博客园所有pyt ...
- FPGA设计思想与技巧(转载)
题记:这个笔记不是特权同学自己整理的,特权同学只是对这个笔记做了一下完善,也忘了是从那DOWNLOAD来的,首先对整理者表示感谢.这些知识点确实都很实用,这些设计思想或者也可以说是经验吧,是很值得每一 ...
- Linux_服务器_07_ 将用户设置为管理员
二.参考资料 1.CentOS普通用户获得管理员权限 2.linux下添加用户并赋予root权限
- mysql也有complex view merging 这个特性(5.6 , 5.7)
出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该声明. ...
- php消息队列之 think queue消息队列初体验
使用thinkphp 5的 消息队列 think queue ● php think queue:listen --queue queuename ● php think queue:work -- ...
- 一起学Linux04之Linux文件基本属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 为了介绍文件属性,首 ...
- 房上的猫:JavaDoc注释
//这是一个注释 /* *这是一个演示程序 */ /** *@这是JavaDoc注释. */ JavaDoc注释 背景: javadoc是Sun公司提供的一个技术,它从程序源代码中抽 ...
- Head First设计模式之命令模式
一.定义 定义:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化.对请求排队或记录请求日志,以及支持可撤消的操作. 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关 ...