問題の意味:長さnの配列、0,1の各位置における値は、2,3、M個の制約がある位置[L [i]は、Rが[I]別に制限そこ値x [i]がA、プログラム番号MOD 998244353を尋ねます
N <= 100、M <= 100
アイデア:
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 typedefの長い 長いLL。 4符号なしのtypedef int型 のuint ; 5 typedefの符号なしの長い 長いULL。 6のtypedef対< INT、INT > PII。 7のtypedef対<-1,11,11-> PLL。 8 typedefのベクトル< int型 > VI。 9のtypedefベクトル<PII> VII。 10のtypedef対<LL、INT > P。 11 の#define N 110 12 の#define M 151000 13 の#define Fiの最初の 14 の#define SE第 15 の#define MPがmake_pair 16件 の#defineパイACOSを(-1) 17 の#defineはsizeof MEM(A、B)のmemset(A、B、 (A)) 18 の#define iは=(INT)B <; I ++)のRep(iについては、B)(I =(INT INT) 19 の#defineため当たり(I、B)(I int型=(INT)A; I> =(INT)B; i--) 20 の#define lowbit(x)は、x&( - X) 21 の#defineランド(RAND()*(1 << 16)+ランド()) 22 の#define ID(X)((X)<= B(X):MN /(X)+1) 23件 の#define LS P << 1 24 の#define RS P << 1 | 1 25 26 のconst int型 MOD = 998244353、INV2 =(MOD + 1)/ 2 。 27 二重 EPS = 1E- 6 。 28 LL INF = 1E18。 29 LL INF = 5E13。 30 int型 DX [ 4 ] = { - 1、1、0、0 }。 31 のint DY [ 4 ] = { 0、0、 - 1、1 }。 32 33 のint DP [ 2 ] [N] [N] [N]。 34個の VII C [N]。 35 36 のint リード() 37 { 38 INT V = 0、F = 1 。 39 チャー C = GETCHAR()。 40 一方、(C < 48 || 57 <C){ もし、(C == ' - ')、F = - 1。C = GETCHAR();} 41 ながら(48 <= C && C <= 57)V =(V <<3)+ V + V + C- 48、C = GETCHAR()。 42 リターンのV *のF; 43 } 44 45 ボイド計算値(int型と、int型B) 46 { 47 + = B。 48 であれば(> = MOD)A- = MOD。 49 } 50 51 のint main()の 52 { 53 // freopenは( "1.in"、 "R"、STDIN)。 54 // freopenは( "1.out"、 "W"、STDOUT)。 55 int型 CAS = リード()。 56 しばらく(cas-- ) 57 { 58 INT N =読み取る()、M = 読み取ります(); 59 担当者(I、1 、N)C [i]は.clear(); 60 担当者(I、1 、m)の 61 { 62 INT X =リード()、y)は(読み取り= Zは= 読み取ります(); 63 // のprintf( "X =%DY =%DZ =%d個の\ n"、X、Y、Z) 64個の C [Y] .push_back(MP(X、Z))。 65 } 66 担当者(I、0 、N) 67 担当者(j、0 、N) 68 担当者(K、0、N)DP [0 ] [i] [j]は[K] = 0 。 69 DP [ 0 ] [ 0 ] [ 0 ] [ 0 ] = 1 。 70 int型の V = 0 ; 71 担当者(I、1 、N) 72 { 73 V ^ = 1 ; 74 担当者(j、0 、I) 75 のrep(K、0 、j)は 76 担当者(T、0、K)DP [V] [j] [k]は[T] = 0 ; 77 担当者(J、0、I- 1 ) 78 担当者(K、0 、j)は 79 担当者(T、0 、k)の 80 { 81 CALC(DP [V] [j] [k]は[T]、DP [ 1 - V] [ J] [K] [T])。 82 CALC(DP [V] [I- 1 ] [K] [T]、DP [ 1 - V] [J] [K] [T])。 83 CALC(DP [V] [I- 1 ] [J] [T]、DP [ 1 - V] [J] [K] [T])。 84 CALC(DP [V] [I- 1 ] [j] [k]は、DP [ 1 -V] [J] [K] [T])。 85 } 86 担当者(j、0、I- 1 ) 87 担当者(K、0 、j)は 88 担当者(T、0 、k)の 89 { 90 のための(int型のx = 0 ; X <C [I] .size( ); X ++ ) 91 { 92 PIIのTMP = C [i]は、[X]。 93 であれば((J> = tmp.fi)+> = tmp.fi(K)+> = tmp.fi(T)+ 1!= tmp.se)DP [V] [j] [k]は[T] = 0 ; 94 } 95 } 96 } 97 INT ANS = 0 。 98 担当者(I、0、N- 1 ) 99 担当者(j、0 、I) 100 のrep(k、0 、j)の計算値(ANS、DP [V] [I] [J] [K])。 101 のprintf(" %d個の\ n " 、ANS)。 102 103 } 104 戻り 0 ; 105 }