zoj3494——BCD_code
来源:互联网 发布:网络美工是什么 编辑:程序博客网 时间:2024/06/05 18:42
ac机 套 数位dp
写的时候错误不断 手残不断 orz
读入拒绝高精度。。。
大不了特判
打死不写高精度。。。
#include <queue>#include <cstdio>#define MOD 1000000009using namespace std;int len,n,T,con;char s[25],c;int u,v;int num[805];struct node {bool word;node *ch[2],*fail;int ret,id;}tr[200010],*root,Fail;int cnt = -1;queue<node*>Q;node *NEW() {tr[++cnt].id = cnt;return &tr[cnt];}void read_str () {len = -1;c = getchar();for(;c > '1' || c < '0'; c = getchar());for(;c <= '1' && c >= '0';c = getchar())s[++len] = c;}int read_int () {char c = getchar();int re = 0;for(;c > '9' || c < '0';c = getchar());for(;c <= '9' && c >= '0';c = getchar())re = re * 10 + c - '0';return re;}void build_tr () {int ID;node *p = root;for(int i = 0;i <= len;++i) {ID = s[i] - '0';if(!p->ch[ID])p->ch[ID] = NEW();p = p->ch[ID];}p->word = 1;}void build_ac () {Q.push(root);node *p;while(!Q.empty()) {p = Q.front();Q.pop();for(int i = 0;i <= 1;++i) {if(p->ch[i]) {if(p == root)p->ch[i]->fail = root;else {p->ch[i]->fail = p->fail->ch[i];if(p->ch[i]->fail->word)p->ch[i]->word = 1;}Q.push(p->ch[i]);}else {if(p == root)p->ch[i] = root;else p->ch[i] = p->fail->ch[i];}}}}int dp[805][2000];int hash[805][2000];node* change (node *now,int Num) {int t = 4;for(int i = 1;i <= 4;++i) {if(Num >= (1 << --t)) {Num -= 1 << t;now = now->ch[1];}else now = now->ch[0];if(now->word)return &Fail;}return now;}int DP (int pos,bool limit,node *now,bool val) {if(pos == num[0] + 1)return 1;if(hash[pos][now->id] == con && !limit && !val)return dp[pos][now->id];int re = 0;node *temp;int upp = limit ? num[pos] : 9;for(int i = 0;i <= upp;++i) {if(i == 0 && val) {if(pos != num[0]) {re += (DP(pos + 1,0,now,1) % MOD);re %= MOD;}else {re += (DP(pos + 1,0,change(now,0),1) % MOD);re %= MOD;}continue;}temp = change(now,i);if(temp->ret != 1) {re += (DP(pos + 1,limit && i == upp,temp,0) % MOD);re %= MOD;}}if(!limit && hash[pos][now->id] != con && !val) {hash[pos][now->id] = con;dp[pos][now->id] = re;}return re;}void get_bign (bool f) {char c = getchar();num[0] = 0;for(;c > '9' || c < '0';c = getchar());for(;c <= '9' && c >= '0';c = getchar()) {num[++num[0]] = c - '0';}if(f) {int te = num[0];--num[te];while(num[te] == -1) {num[te] += 10;num[te - 1]--;te--;}}}int main () {Fail.ret = 1;T = read_int();while(T--) {root = NEW();n = read_int();while(n--) {read_str();build_tr();}build_ac();++con;get_bign(1);u = DP(1,1,root,1);++con;get_bign(0);v = DP(1,1,root,1);printf("%d\n",(v - u + MOD) % MOD);}return 0;}
0 0
- zoj3494——BCD_code
- zoj3494 神码。。。
- BCD Code zoj3494
- zoj3494 BCD Code ac自动机+数位dp
- [AC自动机+数位DP] ZOJ3494 BCD Code
- zoj3494 BCD Code(AC自动机+数位dp)
- ZOJ3494 BCD Code (AC自动机+数位DP)
- ————
- ————————————————FL2440初接触———————————————————
- ——!
- ——
- ————————反射
- ————————枚举
- ————————注解
- ————个人主页————
- 转载————————---多态--------------
- Android————————Handler
- 几种编码格式——————————————————————待整理
- Revit 2016英文版发布,Revit2016 产品以及API的亮点
- 单例模式的7种写法
- OC类的封装
- Hibernate 所有缓存机制详解
- HTML5之浏览器支持、新元素
- zoj3494——BCD_code
- 9.2 SYN-ACK定时器
- 线程组ThreadGroup
- 微信公众平台开发 获得所有关注者的Openid
- 三亚市居住区项目问题总结
- 【JAVA】javap——字节码格式查看工具
- DreamweaverCs5中代码中写汉字编译…
- ArcGISEngine10.0安装后因为授权问…
- MapGIS LicenseService…