TC SRM 556
250pt:
最大xor和路径。
由于权值比较小,暴力就行了。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 #include<vector>
6 #include<set>
7 #include<map>
8 #include<bitset>
9 #include<ctime>
10 #include<iostream>
11 #include<string>
12 #include<cctype>
13 #include<queue>
14 #include<stack>
15 #include<list>
16
17 using namespace std;
18
19 int n;
20
21 struct rec
22 {
23 int num,v;
24 rec(){}
25 rec(int a,int b)
26 {
27 num=a;v=b;
28 }
29 };
30
31 queue<rec> que;
32
33 bool use[1000][2000];
34
35 class XorTravelingSalesman
36 {
37 public:
38 int maxProfit(vector <int> v, vector <string> roads)
39 {
40 n=roads[0].size();
41 que.push(rec(0,v[0]));
42 int ans=v[0];
43 use[0][v[0]]=true;
44 while (que.size())
45 {
46 rec now=que.front();
47 que.pop();
48 for (int a=0;a<n;a++)
49 if (roads[now.num][a]=='Y')
50 {
51 int vv=now.v ^ v[a];
52 if (!use[a][vv])
53 {
54 que.push(rec(a,vv));
55 use[a][vv]=true;
56 ans=max(ans,vv);
57 }
58 }
59 }
60 return ans;
61 }
62 };
63
64 // BEGIN KAWIGIEDIT TESTING
65 // Generated by KawigiEdit 2.1.4 (beta) modified by pivanof
66 bool KawigiEdit_RunTest(int testNum, vector <int> p0, vector <string> p1, bool hasAnswer, int p2) {
67 cout << "Test " << testNum << ": [" << "{";
68 for (int i = 0; int(p0.size()) > i; ++i) {
69 if (i > 0) {
70 cout << ",";
71 }
72 cout << p0[i];
73 }
74 cout << "}" << "," << "{";
75 for (int i = 0; int(p1.size()) > i; ++i) {
76 if (i > 0) {
77 cout << ",";
78 }
79 cout << "\"" << p1[i] << "\"";
80 }
81 cout << "}";
82 cout << "]" << endl;
83 XorTravelingSalesman *obj;
84 int answer;
85 obj = new XorTravelingSalesman();
86 clock_t startTime = clock();
87 answer = obj->maxProfit(p0, p1);
88 clock_t endTime = clock();
89 delete obj;
90 bool res;
91 res = true;
92 cout << "Time: " << double(endTime - startTime) / CLOCKS_PER_SEC << " seconds" << endl;
93 if (hasAnswer) {
94 cout << "Desired answer:" << endl;
95 cout << "\t" << p2 << endl;
96 }
97 cout << "Your answer:" << endl;
98 cout << "\t" << answer << endl;
99 if (hasAnswer) {
100 res = answer == p2;
101 }
102 if (!res) {
103 cout << "DOESN'T MATCH!!!!" << endl;
104 } else if (double(endTime - startTime) / CLOCKS_PER_SEC >= 2) {
105 cout << "FAIL the timeout" << endl;
106 res = false;
107 } else if (hasAnswer) {
108 cout << "Match :-)" << endl;
109 } else {
110 cout << "OK, but is it right?" << endl;
111 }
112 cout << "" << endl;
113 return res;
114 }
115 int main() {
116 bool all_right;
117 all_right = true;
118
119 vector <int> p0;
120 vector <string> p1;
121 int p2;
122
123 {
124 // ----- test 0 -----
125 int t0[] = {0,7,11,5,2};
126 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
127 string t1[] = {"NYNYY","YNYNN","NYNNN","YNNNN","YNNNN"};
128 p1.assign(t1, t1 + sizeof(t1) / sizeof(t1[0]));
129 p2 = 14;
130 all_right = KawigiEdit_RunTest(0, p0, p1, true, p2) && all_right;
131 // ------------------
132 }
133
134 {
135 // ----- test 1 -----
136 int t0[] = {556};
137 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
138 string t1[] = {"N"};
139 p1.assign(t1, t1 + sizeof(t1) / sizeof(t1[0]));
140 p2 = 556;
141 all_right = KawigiEdit_RunTest(1, p0, p1, true, p2) && all_right;
142 // ------------------
143 }
144
145 {
146 // ----- test 2 -----
147 int t0[] = {0,4,8,32,512};
148 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
149 string t1[] = {"NYYYY","YNNNN","YNNNN","YNNNN","YNNNN"};
150 p1.assign(t1, t1 + sizeof(t1) / sizeof(t1[0]));
151 p2 = 556;
152 all_right = KawigiEdit_RunTest(2, p0, p1, true, p2) && all_right;
153 // ------------------
154 }
155
156 {
157 // ----- test 3 -----
158 int t0[] = {37,1,19,64,42,41,64,64,54,16,256,36,64,2,4,2,62,29,58,64,1,32,16,256,17,2,17,4,1,64,21,8,256,63,3,1,43,15,8,39,41,8,16,8,16,256,64,512,45,64};
159 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
160 string t1[] = {"NNNNNNYYYYNNNNNNNNNNNNNNNNNNNNNNNNNYNNNNNNNNNNNNNN","NNNNNNNNNNNNNNNNYNNNNNNNYNNNNNNNNNNNNNNNNYYNNNYYNN","NNNNNYYNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","NNNNNNNYNNNNNNNNNNYNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","NNNNNNNNNNNNNNNYNNYNYNNNNNNYNNNNNNNNNNYNNNNNNNNNNN","NNYNNNYNNNNNNNNYNNYNNNYYNNNYNYNNNNYNNNNNNNNYNNNNNN","YNYNNYNYNNNNNNNYNNNNNNNNNNNNNNNNNNNYNNNNNNNNYNNYNN","YNNYNNYNYNYYNNNNNNNNNNNNNNNNNNNNNNYNNYNNNNNNNNNNNN","YNNNNNNYNNNNNNNNNNNNNNYNYNNNNNNNNNNYYYNNNNNNNYNNNY","YNNNNNNNNNNNNNNNNYNYNYNYYNNNYNNNNYNNNNNNNNNNNNNNNY","NNNNNNNYNNNNYNNNNNNNNYYNNNYYNNNNYNYYNNNNNNNNNNNNNN","NNNNNNNYNNNNNNYNNNNYYNNNYNNYYNNNNNNNNNNNNNYNYNNNNN","NNNNNNNNNNYNNNNNYNNNNYNNNNNNNNNNYNYNNYNYNNNYNYNNNN","NNNNNNNNNNNNNNNYNNNNNNNNNYNNNNNNNNNNNNYNNNNNNNNYNN","NNNNNNNNNNNYNNNNNYNYNNYYNNNNNYNNNNNNNNNYNNYNNYNNNN","NNNNYYYNNNNNNYNNNYYNNYNNNYNYYNNNNNNNNNYYYNNYNNYNYN","NYNNNNNNNNNNYNNNNNNNYNNNYYNNNYNNNNYNNNNNNNNNNNNNNN","NNNNNNNNNYNNNNYYNNNNNNYNNNYNNNNNYNNYNYYNNNNYNNNYNN","NNNYYYNNNNNNNNNYNNNNNYNYNYNNNNNNNNYNNNNNNNNNNN"
161 "NNNN","NNNNNNNNNYNYNNYNNNNNNYNYYYNNNNNNNNNNNYNNYNNNNNYNNN","NNNNYNNNNNNYNNNNYNNNNYNNNYYNNNYNNNYNNNNNNNNNNYNYNY","NNNNNNNNNYYNYNNYNNYYYNYNNNNNNNNYNYNNNNNNNNNNYNNNNN","NNNNNYNNYNYNNNYNNYNNNYNNNNNNNNNNNYNNYNYNNYNNNNNNNN","NNNNNYNNNYNNNNYNNNYYNNNNNNNNNNNNNNNNNNNNNNYNNNYNNN","NYNNNNNNYYNYNNNNYNNYNNNNNNNNNNYNNNNNNYNNNYNNYNNNNN","NNNNNNNNNNNNNYNYYNYYYNNNNNNYNNNNNNNNNNNYYNNNNNNNYN","NNNNNNNNNNYNNNNNNYNNYNNNNNNNNYNNNNYNNNNNNYYNNNNYNN","NNNNYYNNNNYYNNNYNNNNNNNNNYNNNYYNYNNNNNNNNNNNNNNNNN","NNNNNNNNNYNYNNNYNNNNNNNNNNNNNYNNNNYNNNNNNNNYNNYNYN","NNNNNYNNNNNNNNYNYNNNNNNNNNYYYNNNNNNNNYNNNNYNNNNNNN","NNNNNNNNNNNNNNNNNNNNYNNNYNNYNNNNNYNNNNNNNNNNNNNNNY","NNNNNNNNNNNNNNNNNNNNNYNNNNNNNNNNYNNNNNNNNNYNNNNNNN","NNNNNNNNNNYNYNNNNYNNNNNNNNNYNNNYNNNYYNNNNNYNNNYNNN","NNNNNNNNNYNNNNNNNNNNNYYNNNNNNNYNNNNNNNYNNYNNNNNNNN","NNNNNYNYNNYNYNNNYNYNYNNNNNYNYNNNNNNYYNYNYNYNNNNNYN","YNNNNNYNYNYNNNNNNYNNNNNNNNNNNNNNYNYNNNNNYNNYNNNYNN","NNNNNNNNYNNNNNNNNNNNNNYNNNNNNNNNYNYNNNNNNYNNNNNNYN","NNNNNNNYYNNNYNNNNYNYNNNNYNNNNYNNNNNNNNNN"
162 "NYNNNNYNNN","NNNNYNNNNNNNNYNYNYNNNNYNNNNNNNNNNYYNNNNYNNNNNNNNNY","NNNNNNNNNNNNYNYYNNNNNNNNNYNNNNNNNNNNNNYNNNNNYNYYNN","NNNNNNNNNNNNNNNYNNNYNNNNNYNNNNNNNNYYNNNNNNNNNNNNNN","NYNNNNNNNNNNNNNNNNNNNNYNYNYNNNNNNYNNYYNNNNNNNNNNNN","NYNNNNNNNNNYNNYNNNNNNNNYNNYNNYNYYNYNNNNNNNNNYNNNNN","NNNNNYNNNNNNYNNYNYNNNNNNNNNNYNNNNNNYNNNNNNNNNNNNNY","NNNNNNYNNNNYNNNNNNNNNYNNYNNNNNNNNNNNNNNYNNYNNYNNNY","NNNNNNNNYNNNYNYNNNNNYNNNNNNNNNNNNNNNNNNNNNNNYNNNNN","NYNNNNNNNNNNNNNYNNNYNNNYNNNNYNNNYNNNNYNYNNNNNNNNNN","NYNNNNYNNNNNNYNNNYNNYNNNNNYNNNNNNNNYNNNYNNNNNNNNNN","NNNNNNNNNNNNNNNYNNNNNNNNNYNNYNNNNNYNYNNNNNNNNNNNNN","NNNNNNNNYYNNNNNNNNNNYNNNNNNNNNYNNNNNNNYNNNNYYNNNNN"};
163 p1.assign(t1, t1 + sizeof(t1) / sizeof(t1[0]));
164 p2 = 895;
165 all_right = KawigiEdit_RunTest(3, p0, p1, true, p2) && all_right;
166 // ------------------
167 }
168
169 if (all_right) {
170 cout << "You're a stud (at least on the example cases)!" << endl;
171 } else {
172 cout << "Some of the test cases had errors." << endl;
173 }
174 return 0;
175 }
176 // END KAWIGIEDIT TESTING
500pt:
给N张卡片组成的数,每次取出最左的卡片摆在左边或者右边组成一个新的N位数,要求新数大于等于原数并要求最少。
简单的区间DP,DP直接比较字典序即可。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 #include<vector>
6 #include<set>
7 #include<map>
8 #include<bitset>
9 #include<ctime>
10 #include<iostream>
11 #include<string>
12 #include<cctype>
13 #include<queue>
14 #include<stack>
15 #include<list>
16
17 using namespace std;
18
19 string f[60][60][3];
20
21 int cmp(int a,int b)
22 {
23 if (a<b) return 0;
24 if (a==b) return 1;
25 return 2;
26 }
27
28 class LeftRightDigitsGame2
29 {
30 public:
31 string minNumber(string s1, string s2)
32 {
33 int l=s1.size();
34 for (int a=0;a<l;a++)
35 for (int b=0;b<l;b++)
36 for (int c=0;c<3;c++)
37 f[a][b][c]="A";
38 for (int a=0;a<l;a++)
39 f[0][a][cmp(s1[0],s2[a])]=s1[0];
40 for (int a=0;a<l-1;a++)
41 for (int b=0;b<l-a;b++)
42 for (int c=0;c<3;c++)
43 if (f[a][b][c]!="A")
44 {
45 if (b!=0)
46 {
47 if (s1[a+1]<s2[b-1]) f[a+1][b-1][0]=min(f[a+1][b-1][0],s1[a+1]+f[a][b][c]);
48 if (s1[a+1]==s2[b-1]) f[a+1][b-1][c]=min(f[a+1][b-1][c],s1[a+1]+f[a][b][c]);
49 if (s1[a+1]>s2[b-1]) f[a+1][b-1][2]=min(f[a+1][b-1][2],s1[a+1]+f[a][b][c]);
50 }
51 if (b+a!=l-1)
52 {
53 if (s1[a+1]>s2[b+a+1]) f[a+1][b][(c==0) ? 0 : 2]=min(f[a+1][b][(c==0) ? 0 : 2],f[a][b][c]+s1[a+1]);
54 if (s1[a+1]==s2[b+a+1]) f[a+1][b][c]=min(f[a+1][b][c],f[a][b][c]+s1[a+1]);
55 if (s1[a+1]<s2[b+a+1]) f[a+1][b][(c==2) ? 2 : 0]=min(f[a+1][b][(c==2) ? 2 : 0],f[a][b][c]+s1[a+1]);
56 }
57 }
58 if (f[l-1][0][1]=="A" && f[l-1][0][2]=="A") return "";
59 return min(f[l-1][0][1],f[l-1][0][2]);
60 }
61 };
62
63 // BEGIN KAWIGIEDIT TESTING
64 // Generated by KawigiEdit 2.1.4 (beta) modified by pivanof
65 bool KawigiEdit_RunTest(int testNum, string p0, string p1, bool hasAnswer, string p2) {
66 cout << "Test " << testNum << ": [" << "\"" << p0 << "\"" << "," << "\"" << p1 << "\"";
67 cout << "]" << endl;
68 LeftRightDigitsGame2 *obj;
69 string answer;
70 obj = new LeftRightDigitsGame2();
71 clock_t startTime = clock();
72 answer = obj->minNumber(p0, p1);
73 clock_t endTime = clock();
74 delete obj;
75 bool res;
76 res = true;
77 cout << "Time: " << double(endTime - startTime) / CLOCKS_PER_SEC << " seconds" << endl;
78 if (hasAnswer) {
79 cout << "Desired answer:" << endl;
80 cout << "\t" << "\"" << p2 << "\"" << endl;
81 }
82 cout << "Your answer:" << endl;
83 cout << "\t" << "\"" << answer << "\"" << endl;
84 if (hasAnswer) {
85 res = answer == p2;
86 }
87 if (!res) {
88 cout << "DOESN'T MATCH!!!!" << endl;
89 } else if (double(endTime - startTime) / CLOCKS_PER_SEC >= 2) {
90 cout << "FAIL the timeout" << endl;
91 res = false;
92 } else if (hasAnswer) {
93 cout << "Match :-)" << endl;
94 } else {
95 cout << "OK, but is it right?" << endl;
96 }
97 cout << "" << endl;
98 return res;
99 }
100 int main() {
101 bool all_right;
102 all_right = true;
103
104 string p0;
105 string p1;
106 string p2;
107
108 {
109 // ----- test 0 -----
110 p0 = "565";
111 p1 = "556";
112 p2 = "556";
113 all_right = KawigiEdit_RunTest(0, p0, p1, true, p2) && all_right;
114 // ------------------
115 }
116
117 {
118 // ----- test 1 -----
119 p0 = "565";
120 p1 = "566";
121 p2 = "655";
122 all_right = KawigiEdit_RunTest(1, p0, p1, true, p2) && all_right;
123 // ------------------
124 }
125
126 {
127 // ----- test 2 -----
128 p0 = "565";
129 p1 = "656";
130 p2 = "";
131 all_right = KawigiEdit_RunTest(2, p0, p1, true, p2) && all_right;
132 // ------------------
133 }
134
135 {
136 // ----- test 3 -----
137 p0 = "9876543210";
138 p1 = "5565565565";
139 p2 = "5678943210";
140 all_right = KawigiEdit_RunTest(3, p0, p1, true, p2) && all_right;
141 // ------------------
142 }
143
144 {
145 // ----- test 4 -----
146 p0 = "8016352";
147 p1 = "1000000";
148 p2 = "1086352";
149 all_right = KawigiEdit_RunTest(4, p0, p1, true, p2) && all_right;
150 // ------------------
151 }
152
153 if (all_right) {
154 cout << "You're a stud (at least on the example cases)!" << endl;
155 } else {
156 cout << "Some of the test cases had errors." << endl;
157 }
158 return 0;
159 }
160 // END KAWIGIEDIT TESTING
1000pt:
这题超好评。
给你一张图,有些边只能走2次,有些能走无数次,然后给出a1 a2 an b1 b2 bn六个数,你需要从a1走到a2再走回a1总共an次对b1 b2 bn也同理,问是否可行。
嘛,最基础的思路是直接把a1 b1当做起点然后a2 b2当做终点直接跑一遍网络流看是否可行,嘛,这样的话就能过掉所有样例了,然后就被坑了。
这样做的问题在哪里呢?原因是流的时候我有可能是从a1有部分流到了b2去,而b1流到了a2去,这样就导致了虽然满流但并不是符合题意的走法。
So how to solve it ?
嘛,其实解决的办法很简单,先做一遍网络流,不满流就GG了。如果满流的话,交换b1 b2,如果还满流,那就是对的了。
证明如下:
第一次未交换时,我们假设流出来的方案是又不合法的,那么我们设从a1流到b2的流量为x那么有:
a1到a2的流量=an-x
a1到b2的流量=x
b1到a2的流量=x
b1到b2的流量=bn-x
第二次我们交换b1,b2,那么由于都是无向边,那么首先b2从b1可以流bn-x的流量,a1到a2仍然可以流an-x的流量,也就是说两边都还差x的流量。由于第二次流出来是满流的,那么如果我们最后流出来的方案是a1给b1流了x的流量导致满流,那么我们有:
a1到b1和b2都可以流x的流量,那么再交换之后,从a1流到b1的流量我们可以调整为先从b2流到了a1,再从a1流到了b1总共x的流量(关键之处是在于无向图),那么另外一边也可以对称的调整,所以一旦满流,就一定存在可行解。
1 #include <vector>
2 #include <list>
3 #include <map>
4 #include <set>
5 #include <queue>
6 #include <deque>
7 #include <stack>
8 #include <bitset>
9 #include <algorithm>
10 #include <functional>
11 #include <numeric>
12 #include <utility>
13 #include <sstream>
14 #include <iostream>
15 #include <iomanip>
16 #include <cstdio>
17 #include <cmath>
18 #include <cstdlib>
19 #include <ctime>
20 #include <cstring>
21
22 using namespace std;
23
24 const int INF=0x3f3f3f3f;
25
26 int s,t,depth[110],q[110],en;
27
28 struct edge
29 {
30 int e,f;
31 edge *next,*op;
32 }*v[110],ed[21000];
33
34 void add_edge(int s,int e,int f1,int f2)
35 {
36 en++;
37 ed[en].next=v[s];v[s]=ed+en;v[s]->e=e;v[s]->f=f1;
38 en++;
39 ed[en].next=v[e];v[e]=ed+en;v[e]->e=s;v[e]->f=f2;
40 v[s]->op=v[e];v[e]->op=v[s];
41 }
42
43 bool bfs()
44 {
45 memset(depth,0,sizeof(depth));
46 depth[s]=1;
47 q[1]=s;
48 int front=1,tail=1;
49 for (;front<=tail;)
50 {
51 int now=q[front++];
52 for (edge *e=v[now];e;e=e->next)
53 if (e->f && !depth[e->e])
54 {
55 depth[e->e]=depth[now]+1;
56 if (e->e==t) return true;
57 q[++tail]=e->e;
58 }
59 }
60 return false;
61 }
62
63 int dfs(int now,int cur_flow)
64 {
65 if (now==t) return cur_flow;
66 int rest=cur_flow;
67 for (edge *e=v[now];e && rest;e=e->next)
68 if (e->f && depth[e->e]==depth[now]+1)
69 {
70 int new_flow=dfs(e->e,min(rest,e->f));
71 e->f-=new_flow;
72 e->op->f+=new_flow;
73 rest-=new_flow;
74 }
75 if (rest==cur_flow) depth[now]=-1;
76 return cur_flow-rest;
77 }
78
79 int dinic()
80 {
81 int ans=0;
82 while (bfs())
83 ans+=dfs(s,INF);
84 return ans;
85 }
86
87 class OldBridges {
88 public:
89 string isPossible(vector <string> bridges, int a1, int a2, int an, int b1, int b2, int bn) {
90 int n=bridges.size();
91 //a1++;a2++;b1++;b2++;
92 an<<=1;bn<<=1;
93 s=n;t=n+1;
94 en=0;
95 memset(v,0,sizeof(v));
96 for (int a=0;a<n;a++)
97 for (int b=a+1;b<n;b++)
98 if (bridges[a][b]=='O') add_edge(a,b,2,2);
99 else
100 {
101 if (bridges[a][b]=='N') add_edge(a,b,INF,INF);
102 }
103 add_edge(s,a1,an,0);
104 add_edge(a2,t,an,0);
105 add_edge(s,b1,bn,0);
106 add_edge(b2,t,bn,0);
107 if (dinic()!=an+bn) return "No";
108 swap(b1,b2);
109 en=0;
110 memset(v,0,sizeof(v));
111 for (int a=0;a<n;a++)
112 for (int b=a+1;b<n;b++)
113 if (bridges[a][b]=='O') add_edge(a,b,2,2);
114 else
115 {
116 if (bridges[a][b]=='N') add_edge(a,b,INF,INF);
117 }
118 add_edge(s,a1,an,0);
119 add_edge(a2,t,an,0);
120 add_edge(s,b1,bn,0);
121 add_edge(b2,t,bn,0);
122 if (dinic()!=an+bn) return "No";
123 return "Yes";
124 }
125 };
126
127
128 //<%:testing-code%>
129 //Powered by KawigiEdit 2.1.4 (beta) modified by pivanof!
130
131 // BEGIN KAWIGIEDIT TESTING
132 // Generated by KawigiEdit 2.1.4 (beta) modified by pivanof
133 bool KawigiEdit_RunTest(int testNum, vector <string> p0, int p1, int p2, int p3, int p4, int p5, int p6, bool hasAnswer, string p7) {
134 cout << "Test " << testNum << ": [" << "{";
135 for (int i = 0; int(p0.size()) > i; ++i) {
136 if (i > 0) {
137 cout << ",";
138 }
139 cout << "\"" << p0[i] << "\"";
140 }
141 cout << "}" << "," << p1 << "," << p2 << "," << p3 << "," << p4 << "," << p5 << "," << p6;
142 cout << "]" << endl;
143 OldBridges *obj;
144 string answer;
145 obj = new OldBridges();
146 clock_t startTime = clock();
147 answer = obj->isPossible(p0, p1, p2, p3, p4, p5, p6);
148 clock_t endTime = clock();
149 delete obj;
150 bool res;
151 res = true;
152 cout << "Time: " << double(endTime - startTime) / CLOCKS_PER_SEC << " seconds" << endl;
153 if (hasAnswer) {
154 cout << "Desired answer:" << endl;
155 cout << "\t" << "\"" << p7 << "\"" << endl;
156 }
157 cout << "Your answer:" << endl;
158 cout << "\t" << "\"" << answer << "\"" << endl;
159 if (hasAnswer) {
160 res = answer == p7;
161 }
162 if (!res) {
163 cout << "DOESN'T MATCH!!!!" << endl;
164 } else if (double(endTime - startTime) / CLOCKS_PER_SEC >= 2) {
165 cout << "FAIL the timeout" << endl;
166 res = false;
167 } else if (hasAnswer) {
168 cout << "Match :-)" << endl;
169 } else {
170 cout << "OK, but is it right?" << endl;
171 }
172 cout << "" << endl;
173 return res;
174 }
175 int main() {
176 bool all_right;
177 all_right = true;
178
179 vector <string> p0;
180 int p1;
181 int p2;
182 int p3;
183 int p4;
184 int p5;
185 int p6;
186 string p7;
187
188 {
189 // ----- test 0 -----
190 string t0[] = {"XOXX","OXOX","XOXO","XXOX"};
191 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
192 p1 = 0;
193 p2 = 1;
194 p3 = 1;
195 p4 = 2;
196 p5 = 3;
197 p6 = 1;
198 p7 = "Yes";
199 all_right = KawigiEdit_RunTest(0, p0, p1, p2, p3, p4, p5, p6, true, p7) && all_right;
200 // ------------------
201 }
202
203 {
204 // ----- test 1 -----
205 string t0[] = {"XOXX","OXOX","XOXO","XXOX"};
206 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
207 p1 = 0;
208 p2 = 2;
209 p3 = 1;
210 p4 = 1;
211 p5 = 3;
212 p6 = 1;
213 p7 = "No";
214 all_right = KawigiEdit_RunTest(1, p0, p1, p2, p3, p4, p5, p6, true, p7) && all_right;
215 // ------------------
216 }
217
218 {
219 // ----- test 2 -----
220 string t0[] = {"XOXO","OXOX","XOXO","OXOX"};
221 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
222 p1 = 0;
223 p2 = 2;
224 p3 = 1;
225 p4 = 1;
226 p5 = 3;
227 p6 = 1;
228 p7 = "Yes";
229 all_right = KawigiEdit_RunTest(2, p0, p1, p2, p3, p4, p5, p6, true, p7) && all_right;
230 // ------------------
231 }
232
233 {
234 // ----- test 3 -----
235 string t0[] = {"XNXO","NXOX","XOXO","OXOX"};
236 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
237 p1 = 0;
238 p2 = 2;
239 p3 = 1;
240 p4 = 1;
241 p5 = 3;
242 p6 = 2;
243 p7 = "No";
244 all_right = KawigiEdit_RunTest(3, p0, p1, p2, p3, p4, p5, p6, true, p7) && all_right;
245 // ------------------
246 }
247
248 {
249 // ----- test 4 -----
250 string t0[] = {"XOXOO","OXOXO","XOXOO","OXOXO","OOOOX"};
251 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
252 p1 = 0;
253 p2 = 2;
254 p3 = 2;
255 p4 = 1;
256 p5 = 3;
257 p6 = 2;
258 p7 = "Yes";
259 all_right = KawigiEdit_RunTest(4, p0, p1, p2, p3, p4, p5, p6, true, p7) && all_right;
260 // ------------------
261 }
262
263 {
264 // ----- test 5 -----
265 string t0[] = {"XOOOX","OXOOX","OOXOX","OOOXN","XXXNX"};
266 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
267 p1 = 0;
268 p2 = 4;
269 p3 = 3;
270 p4 = 1;
271 p5 = 2;
272 p6 = 2;
273 p7 = "No";
274 all_right = KawigiEdit_RunTest(5, p0, p1, p2, p3, p4, p5, p6, true, p7) && all_right;
275 // ------------------
276 }
277
278 {
279 // ----- test 6 -----
280 string t0[] = {"XOXOOX", "OXXXNO", "XXXOOX", "OXOXOO", "ONOOXO", "XOXOOX"};
281 p0.assign(t0, t0 + sizeof(t0) / sizeof(t0[0]));
282 p1 = 0;
283 p2 = 1;
284 p3 = 3;
285 p4 = 5;
286 p5 = 3;
287 p6 = 3;
288 p7 = "No";
289 all_right = KawigiEdit_RunTest(5, p0, p1, p2, p3, p4, p5, p6, true, p7) && all_right;
290 // ------------------
291 }
292
293 if (all_right) {
294 cout << "You're a stud (at least on the example cases)!" << endl;
295 } else {
296 cout << "Some of the test cases had errors." << endl;
297 }
298 return 0;
299 }
300 // END KAWIGIEDIT TESTING