zoukankan      html  css  js  c++  java
  • Topcoder SRM 655 DIV1 250 CountryGroupHard

    题意:不同国家的人站在一起,同一个国家的人相邻站,给你一个数组,表示 这个位置属于的国家有几个人,0可以是任何数字,问你能不能确定这个数组(只有一个解)

    解题思路:搜索

    解题代码:

      1 // BEGIN CUT HERE
      2 /*
      3 
      4 */
      5 // END CUT HERE
      6 #line 7 "CountryGroupHard.cpp"
      7 #include <cstdlib>
      8 #include <cctype>
      9 #include <cstring>
     10 #include <cstdio>
     11 #include <cmath>
     12 #include <algorithm>
     13 #include <vector>
     14 #include <string>
     15 #include <iostream>
     16 #include <sstream>
     17 #include <map>
     18 #include <set>
     19 #include <queue>
     20 #include <stack>
     21 #include <fstream>
     22 #include <numeric>
     23 #include <iomanip>
     24 #include <bitset>
     25 #include <list>
     26 #include <stdexcept>
     27 #include <functional>
     28 #include <utility>
     29 #include <ctime>
     30 using namespace std;
     31 
     32 #define PB push_back
     33 #define MP make_pair
     34 
     35 #define REP(i,n) for(i=0;i<(n);++i)
     36 #define FOR(i,l,h) for(i=(l);i<=(h);++i)
     37 #define FORD(i,h,l) for(i=(h);i>=(l);--i)
     38 
     39 typedef vector<int> VI;
     40 typedef vector<string> VS;
     41 typedef vector<double> VD;
     42 typedef long long LL;
     43 typedef pair<int,int> PII;
     44 
     45 int color[1000];
     46 int tmp[1000];
     47 int n ;
     48 int ok = 0 ; 
     49 void isok()
     50 {
     51    int tok = 0 ; 
     52    for(int i = 0 ;i < n;i ++)
     53    {
     54       if(color[i] != 0 ) 
     55           tok = 1;
     56       if(i >= 1 && color[i] == 0 && color[i-1] == 0 )
     57           ok = 2; 
     58    }
     59    if(tok == 0 && n != 1)
     60        return;
     61    
     62    ok ++ ; 
     63 }
     64 void dosolve(int k,int be, int c)
     65 {
     66     if(ok == 2)
     67         return;
     68      if(k == n)
     69      {
     70         isok();
     71         return;
     72      }
     73      if(tmp[k] == 0)
     74      {
     75          dosolve(k+1,be,c);
     76          return;
     77      }
     78      if(be > k)
     79      {
     80        if(tmp[k] == c )
     81        {
     82          dosolve(k+1,be,c);
     83        }
     84        else return;
     85      }else{
     86        for(int j = max(be,k-tmp[k]+1); j <= k;j ++)
     87        {
     88           if(j + tmp[k] > n)
     89               break;
     90           for(int s = j ; s < j + tmp[k]; s ++)
     91               color[s] = 1; 
     92           dosolve(k+1,j + tmp[k],tmp[k]);
     93           for(int s = j ; s < j + tmp[k]; s ++)
     94               color[s] = 0; 
     95        }
     96      }
     97 }
     98 class CountryGroupHard
     99 {
    100         public:
    101         string solve(vector <int> a)
    102         {
    103             ok = 0 ;
    104             n = a.size();
    105             for(int i= 0 ;i< n;i ++)
    106                 tmp[i] = a[i];
    107             dosolve(0,0,-1);
    108             //printf("%d
    ",ok);            
    109             if(ok == 1 )
    110             return "Sufficient";
    111             return "Insufficient";
    112         }
    113         
    114 // BEGIN CUT HERE
    115     public:
    116     void run_test(int Case) { if ((Case == -1) || (Case == 0)) test_case_0(); if ((Case == -1) || (Case == 1)) test_case_1(); if ((Case == -1) || (Case == 2)) test_case_2(); if ((Case == -1) || (Case == 3)) test_case_3(); if ((Case == -1) || (Case == 4)) test_case_4(); }
    117     private:
    118     template <typename T> string print_array(const vector<T> &V) { ostringstream os; os << "{ "; for (typename vector<T>::const_iterator iter = V.begin(); iter != V.end(); ++iter) os << '"' << *iter << "","; os << " }"; return os.str(); }
    119     void verify_case(int Case, const string &Expected, const string &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "	Expected: "" << Expected << '"' << endl; cerr << "	Received: "" << Received << '"' << endl; } }
    120     void test_case_0() { int Arr0[] = {0,2,3,0,0}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); string Arg1 = "Sufficient"; verify_case(0, Arg1, solve(Arg0)); }
    121     void test_case_1() { int Arr0[] = {0,2,0}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); string Arg1 = "Insufficient"; verify_case(1, Arg1, solve(Arg0)); }
    122     void test_case_2() { int Arr0[] = {0,3,0,0,3,0}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); string Arg1 = "Sufficient"; verify_case(2, Arg1, solve(Arg0)); }
    123     void test_case_3() { int Arr0[] = {0,0,3,3,0,0}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); string Arg1 = "Insufficient"; verify_case(3, Arg1, solve(Arg0)); }
    124     void test_case_4() { int Arr0[] = {2,2,0,2,2}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); string Arg1 = "Sufficient"; verify_case(4, Arg1, solve(Arg0)); }
    125 
    126 // END CUT HERE
    127 
    128 };
    129 
    130 // BEGIN CUT HERE
    131 int main()
    132 {
    133         CountryGroupHard ___test;
    134         ___test.run_test(-1);
    135         return 0;
    136 }
    137 // END CUT HERE
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    CH负责内容的两个人——北漂18年(66)
    perl 跨行匹配;
    elk之nginx
    perl 分析binlog 定位错误sql 思路
    rsyslog 日志格式和输出
    rsyslog 定义模板
    rsyslog ~ 波浪号
    过滤器
    rsyslog masg和rawmsg的区别
    金融行业的BI应用分析
  • 原文地址:https://www.cnblogs.com/zyue/p/4346535.html
Copyright © 2011-2022 走看看