当前位置: 首页 > 编程日记 > 正文

POJ 2778 AC自己主动机+矩阵幂 不错的题

http://poj.org/problem?id=2778

有空再又一次做下,对状态图的理解非常重要

题解:
http://blog.csdn.net/morgan_xww/article/details/7834801


另外做了矩阵幂的模板:

//ac.sz是矩阵的大小
void mulmtr(long long x[MAXNODE][MAXNODE],long long y[MAXNODE][MAXNODE])//y=x*y
{ll tmp[MAXNODE][MAXNODE];for(int i=0;i<ac.sz;i++){for(int j=0;j<ac.sz;j++){tmp[i][j]=0;for(int k=0;k<ac.sz;k++)tmp[i][j] +=x[i][k]*y[k][j];tmp[i][j] %=MOD;}}for(int i=0;i<ac.sz;i++)for(int j=0;j<ac.sz;j++)y[i][j]=tmp[i][j];
}
void Mtrmi(ll mtr[MAXNODE][MAXNODE],int n)
{for(int i=0;i<ac.sz;i++){for(int j=0;j<ac.sz;j++){if(i == j)ans[i][j]=1;//E矩阵else ans[i][j]=0;}}while(n){if(n&1){mulmtr(mtr,ans);}mulmtr(mtr,mtr);n/=2;}
}




代码:

#include <cstdio>
#include <cstring>
#include <string>
#include <map>
#include <queue>
#include <iostream>
using namespace std;#define ll long longconst int MAXNODE  = 15*15;
const int SSIZE  = 2000000000+100;
const int MOD = 100000;
const int SIGMA_SIZE = 4;
const int SIZE = 20;ll mtr[MAXNODE][MAXNODE];
ll ans[MAXNODE][MAXNODE];
int danger[MAXNODE];struct AC
{int f[MAXNODE];int val[MAXNODE];int last[MAXNODE];int cnt[MAXNODE];int ch[MAXNODE][SIGMA_SIZE];int sz;void init(){memset(ch[0],0,sizeof(ch[0]));memset(cnt,0,sizeof(cnt));f[0]=0;///sz=1;}inline int idx(char x){if(x == 'A')return 0;if(x == 'T')return 1;if(x == 'C')return 2;if(x == 'G')return 3;}void insert(char *s, int v){int n=strlen(s),u=0;for(int i=0;i<n;i++){int id= idx(s[i]);if(!ch[u][id]){memset(ch[sz],0,sizeof(ch[sz]));val[sz]=0;ch[u][id]=sz++;}u=ch[u][id];}val[u]=v;danger[u]=1;}void getfail(){queue<int>q;f[0]=0;for(int c=0;c<SIGMA_SIZE;c++){int u=ch[0][c];if(u){q.push(u);f[u]=0;last[u]=0;}}while(!q.empty()){int r=q.front();q.pop();for(int c=0;c<SIGMA_SIZE;c++){int u=ch[r][c];//if(!u)continue;if(!u){ch[r][c]=ch[f[r]][c];//continue;}q.push(u);int v=f[r];while(v &&!ch[v][c])v=f[v];f[u]=ch[v][c];//last[u]=val[f[u]]?f[u]:last[f[u]];danger[u] |= danger[f[u]];}}}
};
void init()
{memset(mtr,0,sizeof(mtr));memset(danger,0,sizeof(danger));
}AC ac;char str[SIZE];void mulmtr(long long x[MAXNODE][MAXNODE],long long y[MAXNODE][MAXNODE])//y=x*y
{ll tmp[MAXNODE][MAXNODE];for(int i=0;i<ac.sz;i++){for(int j=0;j<ac.sz;j++){tmp[i][j]=0;for(int k=0;k<ac.sz;k++)tmp[i][j] +=x[i][k]*y[k][j];tmp[i][j] %=MOD;}}for(int i=0;i<ac.sz;i++)for(int j=0;j<ac.sz;j++)y[i][j]=tmp[i][j];
}
void Mtrmi(ll mtr[MAXNODE][MAXNODE],int n)
{for(int i=0;i<ac.sz;i++){for(int j=0;j<ac.sz;j++){if(i == j)ans[i][j]=1;//E矩阵else ans[i][j]=0;}}while(n){if(n&1){mulmtr(mtr,ans);}mulmtr(mtr,mtr);n/=2;}
}int main()
{//freopen("poj2788.txt","r",stdin);int n,m;while(~scanf("%d%d",&m,&n)){init();ac.init();for(int i=1;i<=m;i++){scanf("%s",str);ac.insert(str,i);}ac.getfail();for(int i=0;i<ac.sz;i++)if(!danger[i])for(int j=0;j<4;j++)if(!danger[ac.ch[i][j]]){mtr[i][ac.ch[i][j]]++;}Mtrmi(mtr,n);//* for(int i=0;i<ac.sz;i++){for(int j=0;j<ac.sz;j++)printf("%lld|%lld ",mtr[i][j],ans[i][j]);putchar('\n');}*////for(int i=1;i<ac.sz;i++)ans[0][0]+=ans[0][i]%MOD;printf("%I64d\n",ans[0][0]%MOD);}return 0;
}


相关文章:

Libevent调用

1.最基本的打印libevent版本 #include <event.h> #include <stdio.h>int main() {const char *version event_get_version();printf("%s\n",version);return 0; }# gcc getVersion.c -o getVersion -levent 参考&#xff1a;https://github.com/mike-zh…

如何更新你的机器学习模型?手把手带你设计一个可持续的预测模型!

作者 | CloudFactory译者 | 天道酬勤 责编 | 徐威龙出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;高效的机器学习模型需要高质量的数据。训练你的机器学习模型并不是过程中的单个有限阶段。即使将其部署到生产环境中&#xff0c;也可能需要稳定的新训练数据流来确保…

占失物,笔记本电脑电池

公历&#xff1a;2009年3月18日18时11分 农历&#xff1a; 农历己丑年(牛)二月廿二 节气&#xff1a; 2009年3月5日19时2分惊蛰年建&#xff1a;己丑 月建&#xff1a;丁卯 日建&#xff1a;壬戌 时建&#xff1a;己酉 断:玄武中值天地合,故能寻到,在西方,又为长生之地,故为住…

Scala Learn 1 Basic

Chap 0 前言 focus on: Scala 的语法十分简洁Scala 运行在虚拟机之上, 可以使用 java 的海量类库和工具Scala 拥抱函数式编程的同时&#xff0c;并没有废弃面向对象Scala 既有动态语言那样的灵活简洁&#xff0c;同时有保留了静态类型检查的安全与执行效率Scala 既能处理脚本化…

linux下使用NetBeans调试libevent库

1.安装libevent 参考&#xff1a;http://blog.csdn.net/unix21/article/details/8679269 libevent安装在usr/local/libevent下 2.安装netBeans http://www.netbeans.org 3.配置netBeans 1)打开项目的属性选项&#xff0c;选择包含目录&#xff0c;把/usr//local/libevent/…

批量删除指定文件

Linux下的解决方法: # Linux Batch Delete find /home/data/-name ab.doc-exec rm -f {} \;注&#xff1a;最后反斜杠前有一空格&#xff0c;最后一个是分号。Windows下的解决方法:rem Windows Batch Delete 1: DEL /Q /S D:\home\data\*.class 2: FOR /R D…

百万人学AI:CSDN重磅共建人工智能技术新生态

站在AI发展的新十年起点上&#xff0c;CSDN将发挥开发者优势&#xff0c;与中国AI各行业和企业共建“百万人学AI”新技术生态。 作者 | CSDN新媒体事业部 8年前&#xff0c;现图灵奖得主Hinton团队在ImageNet竞赛中首次使用深度学习完胜Google等其它团队&#xff0c;顿时让工…

Android Property Animation属性动画:scale缩放动画(4)

&#xfeff;&#xfeff;Android Property Animation属性动画&#xff1a;scale缩放动画&#xff08;4&#xff09; 和之前我写的附录文章1,2,3相似&#xff0c;本文将接着使用Android Property Animation属性动画实现一个缩放的动画。代码部分和文章1,2,3中的代码大同小异&am…

结构体的两种声明方式:堆上和栈上以及在双链表的应用

在看《算法精解&#xff1a;C语言描述》的双链表chtbl和redis的双链表adlist.c发现代码思路基本是一致的。 但是&#xff0c;对于链表的初始化却不一样 1.《算法精解&#xff1a;C语言描述》风格 /************************************************************************…

COM 组件设计与应用(六)——用 ATL 写第一个组件(vc.net)

一、前言 1、与 《COM 组件设计与应用(五)》的内容基本一致。但本回讲解的是在 vc.net 2003 下的使用方法&#xff0c;即使你不再使用vc6.0&#xff0c;也请和上一回的内容&#xff0c;参照比对。2、这第一个组件&#xff0c;除了所有 COM 组件必须的 IUnknown 接口外&#xff…

《评人工智能如何走向新阶段》后记(再续19)

由AI科技大本营下载自视觉中国304. 也来讨论构建模拟人类思维过程的认知计算机制&#xff0c;好像这个问题迄今尚未获得解决。 我们先从输入的信息类型说起&#xff1a;一类是语言输入&#xff08;包括词、句、文本&#xff09;&#xff0c;第二类是图像输入&#xff08;包括图…

PHP下载/采集远程图片到本地

2019独角兽企业重金招聘Python工程师标准>>> PHP下载/采集远程图片到本地01 /** 02* 下载远程图片到本地 03* 04* param string $url 远程文件地址 05* param string $filename 保存后的文件名&#xff08;为空时则为随机生成的文件名&#xff0c;否则为原文件名&am…

Linux守护进程实现

Linux守护进程 redis版&#xff1a; void daemonize(void) {int fd;if (fork() ! 0) exit(0); /* parent exits */setsid(); /* create a new session *//* Every output goes to /dev/null. If Redis is daemonized but* the logfile is set to stdout in the configuration …

美团十年,支撑最大规模外卖配送的一站式机器学习平台如何炼成?

作者 | 艳伟&#xff0c;美团配送技术团队资深技术专家编辑 | 唐小引题图 | 东方 ICAI 是目前互联网行业炙手可热的“明星”&#xff0c;无论是老牌巨头&#xff0c;还是流量新贵&#xff0c;都在大力研发 AI 技术&#xff0c;为自家的业务赋能。配送作为外卖平台闭环链条上重要…

Windows 2008 R2中的NAP新功能详解

随着Windows Server 2008 R2版本的发布&#xff0c;Windows网络访问保护模式&#xff08;NAP&#xff09;又增加了新功能。在本文中&#xff0c;笔者将对新功能进行简要的介绍。Windows Server 2008中提供的网络访问保护(NAP)功能已经更新到R2版本。在Windows功能、无线网络访问…

whoosh学习(1)

2019独角兽企业重金招聘Python工程师标准>>> 背景 当前项目需要用到全文搜索redis不方便实现mysql效率太低搜索引擎选择 pylucenewhoosh&#xff08;似乎更受欢迎&#xff0c;文档最全&#xff09;为什么选择 纯python实现&#xff0c;省了编译二进制包的繁琐过程。…

仿照redis写的nginx开机画面

redis有一个开机画面&#xff1a; 下面是我写的的nginx开机画面&#xff1a; 新建一个文件 asciilogo.h //仿照redis风格打印一个logo,这样启动的时候就不会不注意 char *ascii_logo " …

房子成焦点,被挂马的房产网站仍在增加中

统计发现&#xff0c;近期大部分使用极光漏洞挂马&#xff0c;这个漏洞实在是太好用了。没打补丁&#xff0c;没装网盾&#xff0c;按网马广告上说的&#xff0c;有不弹、不卡、不闪三大“优点”&#xff0c;点击挂马网页会中招。今天新增被挂马的知名房产网站列表&#xff08;…

检测、量化、追踪新冠病毒,基于深度学习的自动CT图像分析有多靠谱?

作者 | Ophir Gozes, Maayan Frid-Adar等译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;背景&#xff1a;新冠病毒的传播非常迅速&#xff0c;并对数十亿人的生活产生了重大影响。由于非对称胸部CT已被证明是检测、量化和追踪该疾病的有效工具&#xff0…

关于产品体验以及产品会被抄袭的思考

一个好产品本来可以以免费让用户注册为开始吸引用户并从而能引导用户进行消费和购买的&#xff1b;但是由于可能考虑到当前这个产品可能会被别人抄袭&#xff0c;从而设定了门槛&#xff0c;然后营销团队进行沟通&#xff0c;和别人说当前的产品是多么多么的好&#xff0c;从而…

Linux socket 网络编程 常用头文件

一 三种类型的套接字&#xff1a;1.流式套接字&#xff08;SOCKET_STREAM)提供面向连接的可靠的数据传输服务。数据被看作是字节流&#xff0c;无长度限制。例如FTP协议就采用这种。2.数据报式套接字&#xff08;SOCKET_DGRAM&#xff09;提供无连接的数据传输服务&#xff0c;…

达摩院实现自动驾驶核心技术突破,达摩院首次实现3D物体检测精度与速度的兼得

阿里巴巴达摩院在自动驾驶3D物体检测领域取得了新突破&#xff01;达摩院近期一篇论文入选计算机视觉顶会CVPR 2020&#xff0c;该论文提出了一个通用、高性能的自动驾驶检测器&#xff0c;首次实现3D物体检测精度与速度的兼得&#xff0c;有效提升自动驾驶系统安全性能。目前&…

$httpprovider指令中拦截器interceptors的使用介绍

2019独角兽企业重金招聘Python工程师标准>>> $http服务允许我们使用http请求和后台做通信&#xff0c;但是在每一次放松请求之前我们都希望能够捕捉这个请求并且进行操作&#xff0c;比如之前富瑞中每一个请求中header要放入用户名和密码一样&#xff0c;富瑞的做法…

bzero, memset ,setmem 区别

bzero 原型&#xff1a;extern void bzero(void *s, int n);用法&#xff1a;#include <string.h> 功能&#xff1a;置字节字符串s的前n个字节为零。 说明&#xff1a;bzero无返回值。 举例&#xff1a; // bzero.c #include <sysl…

了解这4个重点,带你探索未来将如何设计智能系统和机器人!

作者 | Himanshu Ragtah 译者 | 天道酬勤 责编 | 徐威龙 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 到目前为止&#xff0c;为智能系统设计零件需要从头开始构建零件。从2D草图到可以根据给定的成本、材料和最大重量限制制造的可行且坚固的零件。这通常需要几天…

静态路由和默认路由的配置实例

RTA的配置&#xff1a;interface FastEthernet0/0ip address 1.1.1.2 255.255.255.252duplex autospeed auto!interface FastEthernet0/1no ip addressduplex autospeed autoshutdown!interface FastEthernet1/0ip address 10.10.10.1 255.255.255.0duplex autospeed auto!inte…

Centos运行级别和开机过程

一、Linux运行级别1&#xff09;0&#xff1a;关机2&#xff09;1&#xff1a;单用户3&#xff09;2&#xff1a;多用户状态没有网络服务4&#xff09;3&#xff1a;多用户状态有网络服务5&#xff09;4&#xff1a;系统未使用保留给用户6&#xff09;5&#xff1a;图形界面7&a…

PHP FPM设置

php-fpm启动 拷贝启用文件 # cp -R ./sapi/fpm/php-fpm /etc/init.d/php-fpm 启动 # /etc/init.d/php-fpm 重启 # killall php-fpm # /etc/init.d/php-fpm ------------------------ 进程不够就会起新&#xff0c;新的不能超过pm.max_children&#xff1b; 但是新的也会变为…

MySQL的binarylog处理

繁忙中測試新到的服務器&#xff0c;調試優化app&#xff0c;再加上月底公司搬家&#xff0c;很多配置都要更改。早上不經意telnet改dns的時候發現MySQL日誌很大了。。。 奇怪&#xff0c;我設置過的都改過了。。後來發現這台是子公司帶過來的機器。。。。以前那幾台都沒寫過配…

IJCAI 2020灭霸式拒稿,AI审稿是否更公平?

来源 | 数据派 THU编辑 | 文婧出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;一、IJCAI 2020灭霸式拒稿引众怒随着AAAI 2020于2月7日作为2020年人工智能学界的第一个顶会在美国纽约开幕&#xff0c;人工智能相关领域的研究者们又要为新一年的顶会忙碌了。对于AI界的…