Skip to content

Commit f86021b

Browse files
committed
add: tutorial 4
1 parent 24a1f02 commit f86021b

File tree

2 files changed

+118
-0
lines changed

2 files changed

+118
-0
lines changed

Diff for: Tutorial 4/1.cpp

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#include <iostream>
2+
#include <stdio.h>
3+
#include <set>
4+
5+
using namespace std;
6+
7+
char alphabet[256];
8+
set<int> final_states;
9+
10+
bool isFinal(unsigned int num)
11+
{
12+
unsigned int check=1;
13+
for(int j=0 ; j < 32 ; j++)
14+
{
15+
if ( num & check )
16+
if ( final_states.find(j) != final_states.end() )
17+
return true;
18+
check <<= 1;
19+
}
20+
return false;
21+
}
22+
23+
unsigned int addstate(unsigned int state, int pos)
24+
{
25+
int x=1;
26+
for(int i=0; i<pos-1; i++)
27+
x = x << 1;
28+
return state | x;
29+
}
30+
31+
int main()
32+
{
33+
freopen("input.in", "r", stdin);
34+
int asize;
35+
cin >> asize;
36+
cout << asize<<endl;
37+
char myalphabet;
38+
for(int i=0 ; i<asize ; i++)
39+
{
40+
cin >> myalphabet;
41+
alphabet[myalphabet] = 1;
42+
cout << myalphabet << endl;
43+
}
44+
int n;
45+
cin >> n;
46+
int total_states = 1 << n;
47+
int table[total_states][asize];
48+
cout << n << " " << total_states;
49+
for (unsigned int i=0 ; i<n ; i++ )
50+
{
51+
for (int j=0 ; j< 256 ; j++ )
52+
{
53+
if ( not alphabet[j] )
54+
continue;
55+
56+
int to_states;
57+
cin >> to_states;
58+
unsigned int state = 0;
59+
for (int k=0 ; k<to_states ; k++)
60+
{
61+
int mystate;
62+
cin >> mystate;
63+
state = addstate(state, mystate);
64+
}
65+
table[1<<i][j] = state;
66+
}
67+
}
68+
69+
for (unsigned int i=0 ; i< 1<<n ; i++)
70+
{
71+
unsigned int current = i;
72+
73+
for (int j=0 ; j<256 ; j++ )
74+
{
75+
if ( not alphabet[j] )
76+
continue;
77+
int check=1;
78+
for(int k=0 ; k<32 ; k++)
79+
{
80+
if ( check & current )
81+
{
82+
unsigned int reachable = table[k][j];
83+
table[current][j] |= reachable;
84+
}
85+
check <<= 1;
86+
}
87+
}
88+
}
89+
90+
int final_size;
91+
cin >> final_size;
92+
for(int i=0 ; i<final_size ; i++)
93+
{
94+
int fstate;
95+
cin >> fstate;
96+
final_states.insert(fstate);
97+
}
98+
99+
string s;
100+
cin >> s;
101+
102+
}

Diff for: Tutorial 4/input.in

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2
2+
a b
3+
4+
4
5+
2 1 2
6+
0
7+
2 1 2
8+
0
9+
0
10+
2 1 3
11+
2 1 2
12+
0
13+
14+
2
15+
0 3
16+
ab

0 commit comments

Comments
 (0)