zoukankan      html  css  js  c++  java
  • 第十八周 12.27-1.2

    因为期末了本来不想写了 但是觉得挂篇空文也无所谓 还是写了

    12.27

    去西工大玩。

    12.28-12.29

    什么都没干。

    12.30

    上次挂的BC。

    HDU 5602 Black Jack

    一开始以为A用1表示。

    WA了pretest。

    看clar改完过了pre然后fst。

    一直以为是dp错。找了很久很久找不出来。

    后来看div2的clar才知道只有10用T表示。JQK还是JQK。

    这样都能过pre。sample也没有。无语了。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 double dp1[22][22], dp2[22][22];//x z
     7 double p[11] = { 0,
     8     1.0 / 13, 1.0 / 13, 1.0 / 13,
     9     1.0 / 13, 1.0 / 13, 1.0 / 13,
    10     1.0 / 13, 1.0 / 13, 1.0 / 13, 4.0 / 13
    11 };
    12 
    13 void pre()
    14 {
    15     for(int i = 2; i <= 21; i++)
    16         for(int j = i; j <= 21; j++)
    17             dp1[i][j] = 1;
    18 
    19     for(int i = 21; i >= 2; i--)
    20         for(int j = i - 1; j >= 2; j--)
    21             for(int k = 10; k >= 1; k--)
    22                 if(j + k <= 21) dp1[i][j] += p[k] * dp1[i][j+k];
    23 
    24     for(int i = 21; i >= 2; i--)
    25     {
    26         for(int j = 21; j >= 2; j--)
    27         {
    28             double tmp = 0;//draw->lose
    29             for(int k = 10; k >= 1; k--)
    30             {
    31                 if(i + k > 21) tmp += p[k];
    32                 else tmp += p[k] * dp2[i+k][j];
    33             }
    34             dp2[i][j] = min(dp1[i][j], tmp);
    35         }
    36     }
    37     return;
    38 }
    39 
    40 int num(char c)
    41 {
    42     if(c == 'A') return 1;
    43     if(c >= '0' && c <= '9') return c - '0';
    44     return 10;
    45 }
    46 
    47 int main(void)
    48 {
    49     pre();
    50     int T;
    51     scanf("%d", &T);
    52     while(T--)
    53     {
    54         int s1, s2;
    55         char s[11];
    56         scanf("%s", s);
    57         s1 = num(s[0]) + num(s[1]);
    58         s2 = num(s[2]) + num(s[3]);
    59         puts(dp2[s1][s2] < 0.5 ? "YES" : "NO");
    60     }
    61     return 0;
    62 }
    Aguin

    12.31

    CF 611 D New Year and Ancient Prophecy

    n2搞下LCP就好了。QAQ

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 typedef long long LL;
     6 const LL mod = 1e9 + 7;
     7 LL dp[5005][5005];
     8 char num[5005];
     9 int com[5005][5005];
    10 
    11 bool bigger(int pos1, int pos2, int len)
    12 {
    13     int x = com[pos1][pos2];
    14     if( x >= len) return false;
    15     return num[pos1+x] > num[pos2+x];
    16 }
    17 
    18 int main(void)
    19 {
    20     int n;
    21     scanf("%d%s", &n, num + 1);
    22 
    23     for(int i = n; i >= 1; i--)
    24         for(int j = n; j >= 1; j--)
    25             com[i][j] = num[i] == num[j] ? ( com[i+1][j+1] + 1 ) : 0 ;
    26 
    27     for(int i = 1; i <= n; i++)
    28     {
    29         for(int j = 1; j <= i; j++)
    30         {
    31             if(num[i-j+1] == '0') dp[i][j] = dp[i][j-1];
    32             else if(i == j) dp[i][j] = ( dp[i][j-1] + 1LL ) % mod;
    33             else if( i >= 2 * j && bigger(i-j+1, i-2*j+1, j) ) dp[i][j] = ( dp[i][j-1] + dp[i-j][j] ) % mod;
    34             else dp[i][j] = ( dp[i][j-1] + dp[i-j][min(i-j,j-1)]) % mod;
    35         }
    36     }
    37     printf("%I64d
    ", dp[n][n]);
    38     return 0;
    39 }
    Aguin

    1.1

    CF 611 E New Year and Three Musketeers

    多重集搞搞。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <set>
     5 using namespace std;
     6 multiset<int> M;
     7 multiset<int>::iterator it;
     8 int m[3];
     9 
    10 int main(void)
    11 {
    12     int n;
    13     scanf("%d", &n);
    14     for(int i = 0; i < 3; i++) scanf("%d", m + i);
    15     sort(m, m + 3);
    16     int a = m[0], b = m[1], c = m[2];
    17 
    18     for(int i = 0; i < n; i++)
    19     {
    20         int t;
    21         scanf("%d", &t);
    22         if(t > a + b + c) {puts("-1"); return 0;}
    23         M.insert(t);
    24     }
    25 
    26     int ans = 0;
    27 
    28     while(!M.empty())
    29     {
    30         it = M.lower_bound(b + c + 1);
    31         if(it == M.end()) break;
    32         M.erase(it); ans++;
    33     }
    34 
    35     while(!M.empty())
    36     {
    37         it = M.lower_bound(a + c + 1);
    38         if(it == M.end()) break;
    39         M.erase(it); ans++;
    40         if(M.empty()) break;
    41         it = M.lower_bound(a + 1);
    42         if(it != M.begin()) M.erase(--it);
    43     }
    44 
    45     while(!M.empty())
    46     {
    47         it = M.lower_bound(max(c, a + b) + 1);
    48         if(it == M.end()) break;
    49         M.erase(it); ans++;
    50         if(M.empty()) break;
    51         it = M.lower_bound(b + 1);
    52         if(it != M.begin()) M.erase(--it);
    53     }
    54 
    55     int x = 0, y = 0, k = 0;
    56     for(it = M.begin(); it != M.end(); it++)
    57     {
    58         if(*it <= a + b) x++;
    59         if(*it <= c) y++;
    60     }
    61 
    62     int s = max( (max(x, y) + 1) /2, max(x-y, y-x) );
    63     while(!M.empty() && y)
    64     {
    65         it = M.lower_bound(c + 1);
    66         if(it != M.begin())
    67         {
    68             --it;
    69             if(*it <= a + b) x--;
    70             if(*it <= c) y--;
    71             M.erase(it);
    72         }
    73         it = M.lower_bound(b + 1);
    74         if(it != M.begin())
    75         {
    76             --it;
    77             if(*it <= a + b) x--;
    78             if(*it <= c) y--;
    79             M.erase(it);
    80         }
    81         it = M.lower_bound(a + 1);
    82         if(it != M.begin())
    83         {
    84             --it;
    85             if(*it <= a + b) x--;
    86             if(*it <= c) y--;
    87             M.erase(it);
    88         }
    89         s = min( s, ++k + max( (max(x, y) + 1)/2, max(x-y, y-x) ) );
    90     }
    91 
    92     printf("%d
    ", ans + s);
    93 
    94     return 0;
    95 }
    Aguin

    1.2

    矩阵快速幂!矩阵快速幂!矩阵快速幂!

    一直懒得自己码板。每次都是用到去搜。受不了了!

     1 struct Matrix
     2 {
     3     LL m[maxn][maxn];
     4     Matrix(){memset(m, 0, sizeof(m));}
     5     void E(){for(int i = 0; i < maxn; i++) m[i][i] = 1;}
     6 };
     7 
     8 Matrix M_mul(Matrix a, Matrix b)
     9 {
    10     Matrix ret;
    11     for(int i = 0; i < maxn; i++)
    12         for(int j = 0; j < maxn; j++)
    13             for(int k = 0; k < maxn; k++)
    14                 ret.m[i][j] = ( ret.m[i][j] + (a.m[i][k] * b.m[k][j]) % mod ) % mod;
    15     return ret;
    16 }
    17 
    18 Matrix M_qpow(Matrix P, LL n)
    19 {
    20     Matrix ret;
    21     ret.E();
    22     while(n)
    23     {
    24         if(n & 1LL) ret = M_mul(ret, P);
    25         n >>= 1LL;
    26         P = M_mul(P, P);
    27     }
    28     return ret;
    29 }
    Aguin

    HDU 5607 graph

    直接搞!

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 using namespace std;
      6 typedef long long LL;
      7 const int maxn = 55;
      8 const LL mod = 1e9 + 7;
      9 int G[maxn][maxn], deg[maxn];
     10 LL ans[22][maxn];
     11 
     12 struct query
     13 {
     14     int id, u;
     15     LL K;
     16 }q[22];
     17 
     18 bool cmp(query a, query b)
     19 {
     20     return a.K < b.K;
     21 }
     22 
     23 LL qpow(LL a, LL b)
     24 {
     25     LL ret = 1LL, tmp = a;
     26     while(b)
     27     {
     28        if(b & 1LL) ret = ret * tmp % mod;
     29        tmp = tmp * tmp % mod;
     30        b >>= 1LL;
     31     }
     32     return ret;
     33 }
     34 
     35 LL inv(LL a)
     36 {
     37     LL k = 1e9 + 5;
     38     return qpow(a, k);
     39 }
     40 
     41 struct Matrix
     42 {
     43     LL m[maxn][maxn];
     44     Matrix(){memset(m, 0, sizeof(m));}
     45     void E(){for(int i = 0; i < maxn; i++) m[i][i] = 1;}
     46 };
     47 
     48 Matrix M_mul(Matrix a, Matrix b)
     49 {
     50     Matrix ret;
     51     for(int i = 0; i < maxn; i++)
     52         for(int j = 0; j < maxn; j++)
     53             for(int k = 0; k < maxn; k++)
     54                 ret.m[i][j] = ( ret.m[i][j] + (a.m[i][k] * b.m[k][j]) % mod ) % mod;
     55     return ret;
     56 }
     57 
     58 Matrix M_qpow(Matrix P, LL n)
     59 {
     60     Matrix ret;
     61     ret.E();
     62     while(n)
     63     {
     64         if(n & 1LL) ret = M_mul(ret, P);
     65         n >>= 1LL;
     66         P = M_mul(P, P);
     67     }
     68     return ret;
     69 }
     70 
     71 int main(void)
     72 {
     73     int N, M;
     74     scanf("%d%d", &N, &M);
     75     for(int i = 1; i <= M; i++)
     76     {
     77         int X, Y;
     78         scanf("%d%d", &X, &Y);
     79         deg[X]++;
     80         G[X][Y] = 1;
     81     }
     82     int Q;
     83     scanf("%d", &Q);
     84     for(int i = 0; i < Q; i++)
     85     {
     86         scanf("%d%I64d", &q[i].u, &q[i].K);
     87         q[i].id = i;
     88     }
     89     sort(q, q + Q, cmp);
     90     Matrix A, B = M_qpow(A, 0LL);
     91     for(int i = 1; i <= N; i++)
     92     {
     93         LL R = inv(deg[i]);
     94         for(int j = 1; j <= N; j++)
     95             if(G[i][j]) A.m[j][i] = R;
     96     }
     97     for(int i = 0; i < Q; i++)
     98     {
     99         LL nn;
    100         if(!i) nn = q[i].K;
    101         else nn = q[i].K - q[i-1].K;
    102         B = M_mul(B, M_qpow(A, nn));
    103         for(int j = 1; j <= N; j++) ans[q[i].id][j] = B.m[j][q[i].u];
    104     }
    105     for(int i = 0; i < Q; i++)
    106     {
    107         for(int j = 1; j <= N; j++) printf("%d ", ans[i][j]);
    108         puts("");
    109     }
    110     return 0;
    111 }
    Aguin
  • 相关阅读:
    C语言中的排序算法--冒泡排序,选择排序,希尔排序
    常见算法:C语言求最小公倍数和最大公约数三种算法
    提高软件测试效率的方法探讨
    面试官询问的刁钻问题——以及如何巧妙地应付它们
    软件测试面试--如何测试网页的登录页面
    如何衡量测试效率,如何提高测试效率!
    利用交叉测试提升软件测试效率
    交叉测试的必要性和遇到的问题
    敏捷测试
    HttpWatch工具简介及使用技巧
  • 原文地址:https://www.cnblogs.com/Aguin/p/5089935.html
Copyright © 2011-2022 走看看