[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 下面分别介绍一下这四个 ...
随机推荐
- Spark源码剖析(五):Master原理与源码剖析(下)
一. 状态改变机制源码分析 在剖析Master核心的资源调度算法之前,让我们先来看看Master的状态改变机制. Driver状态改变 可以看出,一旦Driver状态发生改变,基本没有好事情,后果要 ...
- 两个HC-05蓝牙模块互相绑定构成无线串口模块
HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master).从(Slave)和回环(Loopback)三 ...
- lambda表达式不使用委托(delegate) 用FUNC
lLambda不使用delegate关键字,而使用 Lambda运算符 => goes to l 1.Func<int,string> getInput = (int age ...
- Java订单功能模块设计与实现
在商城项目中,之前我们介绍了购物车功能模块的实现,商品加入到购物车之后,就是到购物车结算,然后显示购物车的商品列表,点击去结算,然后到了未提交前的订单列表, 点击提交订单后,生成此订单,返回订单的订单 ...
- 自动生成getter,setter方法的插件lombok
1.在InteiliJ IDEA上安装lombok插件,并重启 . 2.在pom.xml文件中添加依赖 <dependency> <groupId>org.project ...
- NET控件Designer架构设计
总体结构 Designer总体上由三大部分组成:View,ViewModel和Model,这个结构借鉴了流行的MVVM模式.这三部分的职责分工是: View 负责把ViewModel以图形的方式展现出 ...
- Spring之设置Bean值
Java实例的属性值可以有很多种数据类型.基本类型值.字符串类型.java实例甚至其他的Bean实例.java集合.数组等.所以Spring允许通过如下几个元素为Bean实例的属性指定值: value ...
- k8s 核心功能 - 每天5分钟玩转 Docker 容器技术(116)
本节带领大家快速体验 k8s 的核心功能:应用部署.访问.Scale Up/Down 以及滚动更新. 部署应用 执行命令: kubectl run kubernetes-bootcamp \ --im ...
- C函数原理
C语言作为面向过程的语言,函数是其中最重要的部分,同时函数也是C种的一个难点,这篇文章希望通过汇编的方式说明函数的实现原理. 栈结构与相关的寄存器 在计算中,栈是十分重要的一种数据结构,同时也是CPU ...
- 不要错过iost币的免费派发机会
2013 年 ripple 币曾经进行免费派发,而现在瑞波币兑CNY价格最高曾经达到20元, 如果你错过了 ripple 币,就不要错过这次李笑来和徐小平等背书 iost 币的免费派发