java利用lock和unlock实现消费者与生产者问题(多线程)
2014-08-31 23:36
761 查看
查找多个串是否在目标串中出现,简单的AC自动机应用。。。
代码:
代码:
#include <iostream> using namespace std; struct Node{ int next[100]; int fail, flag; void init(){ for( int i= 0; i< 100; ++i ) next[i]= 0; fail= -1; flag= 0; } }; Node tb[100000]; int n, cnt, m; char str[10010]; int mark[1010]; void insert( char*s, int d ){ int rt= 0; while( *s ){ int t= *s- 30; if( tb[rt].next[t]== 0 ){ tb[++cnt].init(); tb[rt].next[t]= cnt; } rt= tb[rt].next[t]; s++; } tb[rt].flag= d; } int que[100000], head, tail; void build(){ int q, p; head= 0, tail= 0, que[0]= 0; while( head<= tail ){ int now= que[head++]; for( int t= 0; t< 100; ++t ) if( tb[now].next[t] ){ p= tb[now].next[t]; q= tb[now].fail; while( q!= -1 && !tb[q].next[t] ) q= tb[q].fail; if( q== -1 ) tb[p].fail= 0; else tb[p].fail= tb[q].next[t]; que[++tail]= p; } } } void match( char*s ){ int rt= 0, q, p; while( *s ){ int t= *s- 30; if( tb[rt].next[t] ) rt= tb[rt].next[t]; else{ p= tb[rt].fail; while( p!= -1 && !tb[p].next[t] ) p= tb[p].fail; if( p== -1 ) rt= 0; else rt= tb[p].next[t]; } if( tb[rt].flag ){ mark[ tb[rt].flag ]= 1; p= tb[rt].fail; while( p && !mark[ tb[p].flag ] ){ mark[ tb[p].flag ]= 1; p= tb[p].fail; } } s++; } } int main(){ cnt= 0; tb[0].init(); scanf("%d",&n ); for( int i= 1; i<= n; ++i ){ scanf("%s",str ); insert( str, i ); } build(); scanf("%d",&m ); int ans= 0; for( int i= 1; i<= m; ++i ){ for( int j= 0; j<= n; ++j ) mark[j]= 0; scanf("%s", str ); match( str ); int num= 0; for( int j= 1; j<= n; ++j ) num+= mark[j]; if( num ){ ans++; printf("web %d:", i ); for( int j= 1; j<= n; ++j ) if( mark[j] ) printf(" %d", j ); puts(""); } } printf("total: %d\n", ans ); return 0; }
相关文章推荐
- 关于网宿厦门研发中心笔试的一道PV操作题:利用java中的多线程实现生产者与消费者的同步问题
- java使用多线程实现生产者消费者问题
- Java多线程实现生产者消费者延伸问题
- java代码实现多线程消费者生产者问题。
- 课程设计——利用信号量实现生产者-消费者问题(java)
- java多线程,这样的生产者消费者实现会有什么问题呢?
- java多线程总结六:经典生产者消费者问题实现
- java 多线程 22 :生产者/消费者模式 进阶 利用await()/signal()实现
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- Java多线程15:Queue、BlockingQueue以及利用BlockingQueue实现生产者/消费者模型
- java多线程实现生产者与消费者问题
- 用JAVA实现多线程(生产者与消费者问题)
- java多线程总结六:经典生产者消费者问题实现
- java多线程之多生产者与多消费者案例之Lock和Condition实现方式
- java多线程实现生产者与消费者---经典问题
- JAVA多线程实现生产者消费者问题
- Java 多线程实现生产者消费者问题(wait/notify)
- 生产者与消费者问题(java多线程实现)
- 多线程经典问题之生产者消费者问题的JAVA实现
- Java多线程15:Queue、BlockingQueue以及利用BlockingQueue实现生产者/消费者模型