zoukankan      html  css  js  c++  java
  • 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 << "	" << p2 << endl;
     96     }
     97     cout << "Your answer:" << endl;
     98     cout << "	" << 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
    View Code

    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 << "	" << """ << p2 << """ << endl;
     81     }
     82     cout << "Your answer:" << endl;
     83     cout << "	" << """ << 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
    View Code

    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 << "	" << """ << p7 << """ << endl;
    156     }
    157     cout << "Your answer:" << endl;
    158     cout << "	" << """ << 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
    View Code
  • 相关阅读:
    CSS清除浮动常用方法小结
    json格式的javascript对象用法分析
    jQuery on()方法绑定动态元素的点击事件无响应的解决办法
    一道思考题(二进制枚举的应用的想法)切金条
    对于excel中,无法把字符型转成数字型解决办法
    对于excel中,无法把字符型转成数字型解决办法
    python文本挖掘输出权重,词频等信息,画出3d权重图
    python文本挖掘输出权重,词频等信息,画出3d权重图
    python使用scikit-learn计算TF-IDF
    python使用scikit-learn计算TF-IDF
  • 原文地址:https://www.cnblogs.com/zhonghaoxi/p/3294465.html
Copyright © 2011-2022 走看看