zoukankan      html  css  js  c++  java
  • SRM470

    250pt

        给定1个最多16颜色的字符串(颜色可以重复),甲在最左边,乙在最右边。轮流操作,每次可以消除一种颜色。

        给定一个k,问谁能最先消除完到位置k之间的障碍。

    思路:

       每个人肯定优先取对方没有的,,所以直接模拟即可

     1 #line 7 "DoorsGame.cpp"
     2 #include <cstdlib>
     3 #include <cctype>
     4 #include <cstring>
     5 #include <cstdio>
     6 #include <cmath>
     7 #include <algorithm>
     8 #include <vector>
     9 #include <string>
    10 #include <iostream>
    11 #include <sstream>
    12 #include <map>
    13 #include <set>
    14 #include <queue>
    15 #include <stack>
    16 #include <fstream>
    17 #include <numeric>
    18 #include <iomanip>
    19 #include <bitset>
    20 #include <list>
    21 #include <stdexcept>
    22 #include <functional>
    23 #include <utility>
    24 #include <ctime>
    25 using namespace std;
    26 
    27 #define PB push_back
    28 #define MP make_pair
    29 #define two(i) (1 << i)
    30 #define REP(i,n) for(i=0;i<(n);++i)
    31 #define FOR(i,l,h) for(i=(l);i<=(h);++i)
    32 #define FORD(i,h,l) for(i=(h);i>=(l);--i)
    33 
    34 typedef vector<int> VI;
    35 typedef vector<string> VS;
    36 typedef vector<double> VD;
    37 typedef long long LL;
    38 typedef pair<int,int> PII;
    39 
    40 
    41 class DoorsGame
    42 {
    43         public:
    44         int determineOutcome(string s, int p)
    45         {
    46              int n = s.size(), S = 0,  S1 = 0;
    47              for (int i = 0; i < p; ++i)
    48                 S |= (1 << (s[i] - 'A'));
    49              for (int i = p; i < n; ++i)
    50                 S1 |= (1 << (s[i] - 'A'));
    51              int same = S & S1;
    52              int ans = 0, j;
    53              while (1){
    54                   j = -1;
    55                   for (int i = 0; i < 16; ++i)
    56                      if (S & two(i)){
    57                           if (j == -1 || !(two(i) & same)) j = i;      
    58                      }
    59                   S -= two(j);
    60                   if (S1 & two(j)) S1 -= two(j);
    61                   ++ans;
    62                   if (S == 0){
    63                        if (S1 == 0) return 0;
    64                        return ans;
    65                   }
    66                   
    67                   j = -1;
    68                   for (int i = 0; i < 16; ++i)
    69                      if (S1 & two(i)){
    70                           if (j == -1 || !(two(i) & same)) j = i;      
    71                      }
    72                   S1 -= two(j);
    73                   if (S & two(j)) S -= two(j);
    74                   ++ans;
    75                   if (S1 == 0){
    76                        if (S == 0) return 0;
    77                        return -ans;
    78                   }   
    79              }
    80              return 0;
    81         }
    82 };
    View Code

    500pt

            两排点,每排n个.上排的和下排的连线.事先已经有些线连好了.求考虑所有的连线方案时,连线交点个数的期望

    思路:
            三类计数:事先已经连好的线间的交点数.新增连线和原有连线的交点数期望.新增连线之间交点期望.

     1 // BEGIN CUT HERE
     2 /*
     3 
     4 */
     5 // END CUT HERE
     6 #line 7 "DrawingLines.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 
    46 class DrawingLines
    47 {
    48         public:
    49         double countLineCrossings(int n, vector <int> s, vector <int> t)
    50         {
    51              int m = s.size();
    52              double ret = (n - m) * (n - m - 1.0) / 4.0;
    53              for (int i = 0; i < m; ++i)
    54                for (int j = i + 1; j < m; ++j)
    55                  if ((s[i] < s[j] && t[i] > t[j]) || (s[i] > s[j] && t[i] < t[j])) ret += 1.0;
    56              for (int i = 0; i < m; ++i){
    57                    double s1 = s[i] - 1,  s2 = n - s[i], t1 = t[i] - 1, t2 = n - t[i];
    58                    for (int j = 0; j < m; ++j){
    59                         if (s[j] < s[i]) --s1;
    60                         if (s[j] > s[i]) --s2;
    61                         if (t[j] < t[i]) --t1;
    62                         if (t[j] > t[i]) --t2;
    63                    }   
    64                    ret += (s1 * t2 + s2 * t1) / (t1 + t2);
    65              }
    66              return ret;
    67         }
    68 
    69 };
    View Code
  • 相关阅读:
    poj2928:素数回文数的个数
    R语言学习中的小bug:R中矩阵相乘错误于A %*% B: 需要数值/复数矩阵/矢量参数
    poj3247:回文素数
    Python爬虫之BeautifulSoap的用法
    python jieba库的使用说明
    彻底弄懂python编码
    第八周助教总结
    python中数组用法
    python列表操作大全
    python—各种常用函数及库
  • 原文地址:https://www.cnblogs.com/yzcstc/p/3602572.html
Copyright © 2011-2022 走看看