BZOJ4531 && BJOI2014 trace
2024-08-28 15:02:38
#include<cstdio>
#include<cctype>
using namespace std ; struct state {
int len ;
int p ;
int h ;
int last ;
state ( const int len , const int p , const int h ,
const int last ) : len ( len ) , p ( p ) , h ( h ) ,
last ( last ) {} ;
int hash () const {
return len * + * p + h * + last ;
//this is a perfect hash
}
} ; const int MAXN = ;
const long long MOD = ( long long ) ( 1e9 + ) ;
int N , M , K ; int G [ MAXN ] [ MAXN ] ;
char s [ MAXN ] ; const int size_of_dp = ;
long long dp [ size_of_dp ] ;
bool vis [ size_of_dp ] ; int main () ; //complete checking checked
long long D ( const state o ) ; //complete
long long T ( const state o , const int p ) ;//complete
long long T0 ( const state o , const int p ) ;//complete
long long T1 ( const state o , const int p ) ;//complete
long long T2 ( const state o , const int p ) ;//complete
long long T3 ( const state o , const int p ) ;//complete
long long T4 ( const state o , const int p ) ;//complete
long long T5 ( const state o , const int p ) ;//complete long long D ( const state o ) {
if ( vis [ o . hash () ] ) return dp [ o . hash () ] ;
vis [ o . hash () ] = true ;
if ( o . len == K ) {
if ( o . h == && o . last < )
return dp [ o . hash () ] = ;
else return ;
}
long long ans = ;
for ( int i = ; i <= N ; ++ i )
if ( G [ o . p ] [ i ] ) {
ans += T ( o , i ) ;
ans %= MOD ;
}
#ifdef DEBUG
printf ( "(%d,%d,%d,%d)=%lld\n" , o . len , o . p , o . h , o . last , ans ) ;
#endif
return dp [ o . hash () ] = ans ;
} long long T ( const state o , const int p ) {
switch ( o . last ) {
case : return T0 ( o , p ) ;
case : return T1 ( o , p ) ;
case : return T2 ( o , p ) ;
case : return T3 ( o , p ) ;
case : return T4 ( o , p ) ;
case : return T5 ( o , p ) ;
}
return ;
} int main () {
freopen ( "trace.in" , "r" , stdin ) ;
freopen ( "trace.out" , "w" , stdout ) ;
scanf ( "%d%d%d" , & N , & M , & K ) ;
scanf ( "%s" , s + ) ;
while ( M -- ) {
int a , b ;
scanf ( "%d%d" , & a , & b ) ;
G [ a ] [ b ] = G [ b ] [ a ] = ;
}
for ( int i = ; i <= N ; ++ i ) G [ ] [ i ] = ;
printf ( "%lld\n" , D ( state ( , , , ) ) ) ;
return ;
} long long T0 ( const state o , const int p ) {
if ( s [ p ] == ')' && o . h > )
return D ( state ( o . len + , p , o . h - , ) ) ;
if ( s [ p ] == '+' || s [ p ] == '-' ||
s [ p ] == '*' || s [ p ] == '/' )
return D ( state ( o . len + , p , o . h , ) ) ;
return ;
} long long T1 ( const state o , const int p ) {
if ( isdigit ( s [ p ] ) )
return D ( state ( o . len + , p , o . h , ) ) ;
if ( s [ p ] == '+' || s [ p ] == '-' ||
s [ p ] == '*' || s [ p ] == '/' )
return D ( state ( o . len + , p , o . h , ) ) ;
if ( s [ p ] == ')' && o . h > )
return D ( state ( o . len + , p , o . h - , ) ) ;
return ;
} long long T2 ( const state o , const int p ) {
if ( s [ p ] == '+' || s [ p ] == '-' ||
s [ p ] == '*' || s [ p ] == '/' )
return D ( state ( o . len + , p , o . h , ) ) ;
if ( s [ p ] == ')' && o . h > )
return D ( state ( o . len + , p , o . h - , ) ) ;
return ;
} long long T3 ( const state o , const int p ) {
if ( s [ p ] == '(' )
return D ( state ( o . len + , p , o . h + , ) ) ;
if ( s [ p ] == '-' )
return D ( state ( o . len + , p , o . h , ) ) ;
if ( s [ p ] == '' )
return D ( state ( o . len + , p , o . h , ) ) ;
if ( s [ p ] >= '' && s [ p ] <= '' )
return D ( state ( o . len + , p , o . h , ) ) ;
return ;
} long long T4 ( const state o , const int p ) {
if ( s [ p ] == '' )
return D ( state ( o . len + , p , o . h , ) ) ;
if ( s [ p ] >= '' && s [ p ] <= '' )
return D ( state ( o . len + , p , o . h , ) ) ;
if ( s [ p ] == '(' )
return D ( state ( o . len + , p , o . h + , ) ) ;
return ;
} long long T5 ( const state o , const int p ) {
if ( s [ p ] == '' )
return D ( state ( o . len + , p , o . h , ) ) ;
if ( s [ p ] >= '' && s [ p ] <= '' )
return D ( state ( o . len + , p , o . h , ) ) ;
if ( s [ p ] == '(' )
return D ( state ( o . len + , p , o . h + , ) ) ;
return ;
}
今天Z老把BJOI的题当练习给我们做,结果这道题只有50分。检查出来多写了一个+1,一脸。。
最新文章
- JavaScript模板引擎artTemplate.js——结语
- javascript keycode大全
- python有超时的windows系统时间设置代码
- 做一个阅读管理APP
- python判断字符串
- 第二十三章、软件安装: RPM, SRPM 与 YUM 功能
- css系列教程--简介及基础语法和注意事项
- shareInstance
- 同步博客—CSDN推广
- Freemaker:操作集合
- db2报错 Operation not allowed for reason
- oracle数据库名称已被一现有约束条件占用
- 理解 boxsizing
- asp.net core2.0学习笔记
- Big-endian/Little-endian, LSB/MSB
- 码云创建maven工程
- ie7/8浏览器报错:对象不支持&ldquo;trim&rdquo;属性或方法
- 向文件写入一个数据块---write
- 传输控制协议--- Transmission Control Protocol (TCP)
- PHP Warning: strftime(): It is not safe to rely on the system&#39;s timezone set