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

    昨天晚上网络太不给力了,一言难尽啊,泪奔啊

     1 #include <iostream> 
     2 #include <string> 
     3 #include <vector> 
     4 #include <cmath> 
     5 #include <map> 
     6 #include <algorithm> 
     7 using namespace std; 
     8 
     9 int judge[100]; 
    10 class ColorfulBricks { 
    11 public: 
    12   int countLayouts(string bricks) { 
    13     int count = 0; 
    14 
    15 
    16     for (int i = 0; i < 100; i++) { 
    17       judge[i] = 0; 
    18     } 
    19     for (int i = 0; i < bricks.size() ; i++) { 
    20       int tmp = bricks[i] - 'A'; 
    21       judge[tmp]++; 
    22     } 
    23 
    24     for (int i = 0; i < 100; i++) { 
    25       if (judge[i] > 0) 
    26         count++; 
    27     } 
    28     if (count > 2) 
    29       return 0; 
    30     else if (count == 2) 
    31       return 2; 
    32     else 
    33       return 1; 
    34   } 
    35 
    36 };

    第二题

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <cstdlib>
     5 #include <cmath>
     6 #include <map>
     7 #include <algorithm>
     8 #include <list>
     9 using namespace std;
    10 
    11 class ColorfulChocolates {
    12 public:
    13     int max_num(map<int, map<int, int> > judge, int maxSwaps) {//以任意一个为中心,其他的都向它的方向交换
    14         int judge_size = judge.size();
    15         int ctertmp, ctermax;
    16         int step = 0;
    17         ctertmp = 1;
    18         ctermax = 1;
    19         for (int i = 0; i < judge_size; i++) {
    20             int left, right;
    21             left = i - 1;
    22             right = i + 1;
    23             ctertmp = 1;
    24             step = 0;
    25             while (left != -1 || right != judge_size) {
    26                 int tmp;
    27                 if (left != -1 && right != judge_size) {
    28                     tmp = min((judge[i][left] - (i - left)),
    29                             (judge[i][right] - (right - i)));
    30                     if (tmp == (judge[i][left] - (i - left))) {
    31                         left--;
    32                     } else
    33                         right++;
    34 
    35                 } else if (right != judge_size) {
    36                     tmp = (judge[i][right] - (right - i));
    37                     right++;
    38                 } else if (left != -1) {
    39                     tmp = (judge[i][left] - (i - left));
    40                     left--;
    41                 }
    42                 step = step + tmp;
    43                 if (step > maxSwaps)
    44                     break;
    45                 ctertmp++;
    46             }
    47             ctermax = max(ctermax, ctertmp);
    48         }
    49         return ctermax;
    50     }
    51     int maximumSpread(string chocolates, int maxSwaps) {
    52         int myi, myj;
    53         int res = 1;
    54         for (int i = 0; i < 26; i++) {
    55             char tmp = 'A' + i;
    56             map<int, map<int, int> > judge;
    57             myi = myj = 0;
    58             for (int j = 0; j < chocolates.size(); j++) {//构造一个矩阵,记录第i个到第j个的距离
    59                 if (chocolates[j] == tmp) {
    60                     myj = myi;
    61                     for (int k = j + 1; k < chocolates.size(); k++) {
    62                         if (chocolates[k] == tmp) {
    63                             myj++;
    64                             judge[myi][myj] = judge[myj][myi] = k - j;
    65                         }
    66                     }
    67                     myi++;
    68                 }
    69             }
    70             int tmpkaka = max_num(judge, maxSwaps);
    71             res = max(res, tmpkaka);
    72         }
    73         return res;
    74     }
    75 };

     第三题是动态规划的题,代码不想写了http://blog.csdn.net/acm_cxlove/article/details/7831457

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <cstdlib>
     5 #include <cmath>
     6 #include <map>
     7 #include <algorithm>
     8 #include <list>
     9 using namespace std;
    10 #define MOD 1000000007
    11 int dp[3][3][51][51][51];
    12 int cnt[3], n;
    13 class ColorfulCupcakesDivTwo {
    14 public:
    15     int slove(int pos, int pre, int fst, int a, int b, int c) {
    16         if (a < 0 || b < 0 || c < 0)
    17             return 0;
    18         if (pos == n)
    19             return pre != fst;
    20         if (dp[fst][pre][a][b][c] != -1)
    21             return dp[fst][pre][a][b][c];
    22         int ret = 0;
    23         if (pos == 0) {
    24             ret = (ret + slove(pos + 1, 0, 0, a - 1, b, c)) % MOD;
    25             ret = (ret + slove(pos + 1, 1, 1, a, b - 1, c)) % MOD;
    26             ret = (ret + slove(pos + 1, 2, 2, a, b, c - 1)) % MOD;
    27         } else if (pre == 0) {
    28             ret = (ret + slove(pos + 1, fst, 1, a, b - 1, c)) % MOD;
    29             ret = (ret + slove(pos + 1, fst, 2, a, b, c - 1)) % MOD;
    30         } else if (pre == 1) {
    31             ret = (ret + slove(pos + 1, fst, 0, a - 1, b, c)) % MOD;
    32             ret = (ret + slove(pos + 1, fst, 2, a, b, c - 1)) % MOD;
    33         } else if (pre == 2) {
    34             ret = (ret + slove(pos + 1, fst, 0, a - 1, b, c)) % MOD;
    35             ret = (ret + slove(pos + 1, fst, 1, a, b - 1, c)) % MOD;
    36         }
    37         return dp[fst][pre][a][b][c] = ret;
    38     }
    39     int countArrangements(string cupcakes) {
    40         cnt[0] = cnt[1] = cnt[2] = 0;
    41         n = cupcakes.size();
    42         for (int i = 0; i < n; i++)
    43             cnt[cupcakes[i] - 'A']++;
    44         memset(dp, -1, sizeof(dp));
    45         return slove(0, 0, 0, cnt[0], cnt[1], cnt[2]);
    46     }
    47 
    48 };
  • 相关阅读:
    做了点数论的题
    2016日报总结
    2016在H3C
    2017春节小目标
    2016项目小总结
    明明的随机数
    计算字符个数
    字符串最后一个单词的长度
    字符串分隔
    考研回忆
  • 原文地址:https://www.cnblogs.com/kakamilan/p/2623789.html
Copyright © 2011-2022 走看看