zoukankan      html  css  js  c++  java
  • SRM 574 DIV2

    1、目前为止见过的最长的第一道题目了,直接计数就OK了

     1 #include <iostream> 
     2 #include <string> 
     3 #include <vector> 
     4 #include <cstdlib> 
     5 #include <cmath> 
     6 #include <map> 
     7 #include <stack> 
     8 #include <algorithm> 
     9 #include <list> 
    10 #include <ctime> 
    11 #include <set> 
    12 #include <queue> 
    13 typedef long long ll; 
    14 using namespace std; 
    15 int a[30]; 
    16 class CityMap { 
    17 public: 
    18   string getLegend(vector<string> cityMap, vector<int> POIs) { 
    19     int r = cityMap.size(); 
    20     int c = cityMap[0].size(); 
    21     int sz = POIs.size(); 
    22     string res; 
    23     for (int i = 0; i < r; i++) { 
    24       for (int j = 0; j < c; j++) { 
    25         int t = cityMap[i][j] - 'A'; 
    26         if (cityMap[i][j] != '.') { 
    27           a[t]++; 
    28         } 
    29       } 
    30     } 
    31     for (int i = 0; i < sz; i++) { 
    32       for (int j = 0; j < 30; j++) { 
    33         if (a[j] == POIs[i]) { 
    34           char t = 'A' + j; 
    35           res += t; 
    36           break; 
    37         } 
    38 
    39       } 
    40 
    41     } 
    42     return res; 
    43 
    44   } 
    45 };

     2、当时脑子秀逗了,写了一百多行,只需要对当前情况和翻转以后判断一些就ok了,B出现在A的最左边时需要注意一下,我就这么cha掉一个

    #include <iostream>
    #include <string>
    #include <vector>
    #include <cstdlib>
    #include <cmath>
    #include <map>
    #include <stack>
    #include <algorithm>
    #include <list>
    #include <ctime>
    #include <set>
    #include <queue>
    #include <sstream>
    typedef long long ll;
    using namespace std;
    
    int exist[20];
    
    class TheNumberGameDiv2 {
    public:
    
        int minimumMoves(int A, int B) {
            stringstream a, b;
            a << A;
            b << B;
            string va, vb;
            a >> va;
            b >> vb;
            int sza = va.size();
            int szb = vb.size();
            int pos = va.find(vb);
            int res=100;
            if (pos == 0) {
                res=min(res, (sza - szb));
            } else if (pos > 0) {
                res=min(res, (sza - szb) + 2);
            }
    
            reverse(va.begin(), va.end());
            pos = va.find(vb);
    
            if (pos >= 0) {
                res=min(res, (sza - szb) + 1);
            }
            if(res==100)
            return -1;
            return res;
    
        }
    };

    3、递归算法就ok了,第二道题耽误太多时间,没时间写了

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <cstdlib>
     5 #include <cmath>
     6 #include <map>
     7 #include <stack>
     8 #include <algorithm>
     9 #include <list>
    10 #include <ctime>
    11 #include <set>
    12 #include <queue>
    13 typedef long long ll;
    14 using namespace std;
    15 
    16 int exist[20];
    17 
    18 class PolygonTraversal2 {
    19 public:
    20 
    21     int bfs(int cur, int n,int s) {
    22         int over = 1;
    23         int res = 0;
    24         for (int i = 0; i < n; i++) {
    25             if (exist[i] == 0) {
    26                 over = 0;
    27                 break;
    28             }
    29         }
    30         if (1 == over) {
    31             if (cur == ((s+n-1)%n) || cur == ((s+1)%n)) {
    32                 return 0;
    33             } else {
    34                 return 1;
    35             }
    36         }
    37         for (int i = 0; i < n; i++) {
    38             if (exist[i] == 0) {
    39                 int start = min(i, cur);
    40                 int end = max(i, cur);
    41                 int num = 0;
    42                 for (int j = start + 1; j < end; j++) {
    43                     if (exist[j] == 1) {
    44                         num++;
    45                         break;
    46                     }
    47                 }
    48 
    49                 if (1 == num) {
    50                     for (int j = (end + 1); j < n; j++) {
    51                         if (exist[j] == 1) {
    52                             num = 2;
    53                             break;
    54                         }
    55                     }
    56                     for (int j = 0; j < start; j++) {
    57                         if (exist[j] == 1) {
    58                             num = 2;
    59                             break;
    60                         }
    61                     }
    62                 }
    63 
    64                 if (2 == num) {
    65                     exist[i] = 1;
    66                     int t = bfs(i, n,s);
    67                     res = res + t;
    68                     exist[i] = 0;
    69                 }
    70             }
    71         }
    72 
    73         return res;
    74     }
    75     int count(int N, vector<int> points) {
    76         int sz = points.size();
    77         int t = 100;
    78         for (int i = 0; i < sz; i++) {
    79             t = min(points[i], t);
    80         }
    81         for (int i = 0; i < sz; i++) {
    82             points[i] = points[i] - t;
    83         }
    84         for (int i = 0; i < sz; i++) {
    85             exist[points[i]] = 1;
    86         }
    87         int cur = points[sz - 1];
    88         int res = bfs(cur, N,points[0]);
    89         return res;
    90 
    91     }
    92 };

     DIV1-2、状态压缩,用DIV2-2做成dp应该也可以,peter的代码改的~~

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <cstdlib>
     5 #include <cmath>
     6 #include <map>
     7 #include <stack>
     8 #include <algorithm>
     9 #include <list>
    10 #include <ctime>
    11 #include <set>
    12 #include <queue>
    13 typedef long long ll;
    14 using namespace std;
    15 
    16 class PolygonTraversal {
    17 public:
    18     ll count(int N, vector<int> points) {
    19         int all = (1 << N);
    20         vector<vector<ll> > ways(all, vector<ll>(N, 0));
    21         int start = 0;
    22         int sz = points.size();
    23         for (int i = 0; i < sz; i++) {
    24             start = start | (1 << (points[i] - 1));
    25         }
    26         ways[start][points[sz - 1] - 1] = 1;
    27         for (int set = 0; set < all; ++set)
    28             for (int cur = 0; cur < N; ++cur)
    29                 if (ways[set][cur] > 0) {
    30                     for (int next = 0; next < N; ++next)
    31                         if ((set & (1 << next)) == 0) {
    32                             int a = min(cur, next);
    33                             int b = max(cur, next);
    34                             int m1 = (set & ((1 << a) - 1))
    35                                     | ((set >> (b + 1)) << (b + 1));
    36                             int m2 = ((set & ((1 << b) - 1)) >> (a + 1))
    37                                     << (a + 1);
    38                             if (m1 == 0 || m2 == 0)
    39                                 continue;
    40                             ways[set | (1 << next)][next] += ways[set][cur];
    41                         }
    42                 }
    43         ll res = 0;
    44         for (int cur = 0; cur < N; ++cur)
    45             if (ways[all - 1][cur] > 0) {
    46                 int set = all - 1;
    47                 int next = points[0] - 1;
    48                 int a = min(cur, next);
    49                 int b = max(cur, next);
    50                 int m1 = (set & ((1 << a) - 1)) | ((set >> (b + 1)) << (b + 1));
    51                 int m2 = ((set & ((1 << b) - 1)) >> (a + 1)) << (a + 1);
    52                 if (m1 == 0 || m2 == 0)
    53                     continue;
    54                 res += ways[set][cur];
    55             }
    56         return res;
    57     }
    58 };
  • 相关阅读:
    ES基础(六十六)使用 shrink与rolloverAPI有效的管理索引
    ES基础(六十五)一些运维相关的建议
    ES基础(六十四)监控 Elasticsearch 集群
    ES基础(六十三)缓存及使用Circuit Breaker限制内存使用
    ES基础(六十一)集群压力测试
    javascript学习五---OOP
    七个对我最重要的职业建议)--转载来自ruanyifeng博客
    javascript学习(五)之标准对象
    javascript学习--(四)面向对象:
    javascript学习笔记-(三)
  • 原文地址:https://www.cnblogs.com/kakamilan/p/2982058.html
Copyright © 2011-2022 走看看