zoukankan      html  css  js  c++  java
  • 第十七周 12.20-12.26

    12.20-12.22

    什么都没做。

    12.23

    POJ 3581 Sequence

    这是一个单case过EOF哇的神题。我只是想验个板阿QAQ。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 const int maxn = 1e6 + 10;
     7 
     8 int s[maxn], rev[maxn];
     9 int n, k, SA[maxn], r[maxn], tmp[maxn];
    10 bool cmp(int i, int j)
    11 {
    12     if(r[i] != r[j]) return r[i] < r[j];
    13     return ( i + k <= n ? r[i+k] : -1 ) < ( j + k <= n ? r[j+k] : -1 );
    14 }
    15 void get_SA(int sz)
    16 {
    17     for(int i = 0; i <= sz; i++)
    18     {
    19         SA[i] = i;
    20         r[i] = i < sz ? rev[i] : -1;
    21     }
    22     for(k = 1; k <= sz; k <<= 1)
    23     {
    24         sort(SA, SA + sz + 1, cmp);
    25         tmp[SA[0]] = 0;
    26         for(int i = 1; i <= sz; i++) tmp[SA[i]] = tmp[SA[i-1]] + cmp(SA[i-1], SA[i]);
    27         memcpy(r, tmp, sizeof(r));
    28     }
    29     return;
    30 }
    31 
    32 void R(int * t, int l, int r)
    33 {
    34     for(int i = 0; i <= (r - l) / 2; i++) swap(t[l+i], t[r-i]);
    35 }
    36 
    37 int main(void)
    38 {
    39     scanf("%d", &n);
    40     int p1, p2;
    41     for(int i = 0; i < n; i++) scanf("%d", s + i);
    42     memcpy(rev, s, sizeof(rev));
    43     R(rev, 0, n - 1);
    44     get_SA(n);
    45     for(int i = 0; i <= n; i++)
    46         if(SA[i] > 1 && SA[i] < n)
    47             {p1 = n - SA[i]; break;}
    48     int m = n - p1;
    49     for(int i = 0; i < m; i++) rev[i] = rev[i + m] = s[p1 + i];
    50     R(rev, 0, 2 * m - 1);
    51     get_SA(2 * m);
    52     for(int i = 0; i <= 2 * m; i++)
    53     {
    54         p2 = p1 + m - SA[i];
    55         if(p2 > p1 && p2 < n) break;
    56     }
    57     R(s, 0, p1 - 1);
    58     R(s, p1, p2 - 1);
    59     R(s, p2, n - 1);
    60     for(int i = 0; i < n; i++) printf("%d
    ", s[i]);
    61     return 0;
    62 }
    Aguin

    12.24

    补个CF。

    CF 608 C Chain Reaction

    dp推。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 const int maxn = 1e6 + 10;
     6 int pos[maxn], level[maxn];
     7 int dp[maxn];
     8 
     9 int main(void)
    10 {
    11     int n;
    12     scanf("%d", &n);
    13     for(int i = 1; i <= n; i++)
    14     {
    15         int a, b;
    16         scanf("%d%d", &a, &b);
    17         pos[a] = 1;
    18         level[a] = b;
    19     }
    20     int ans = 0;
    21     for(int i = 0; i < maxn; i++)
    22     {
    23         if(!pos[i]) dp[i+1] = dp[i];
    24         else dp[i+1] = (i - level[i] >= 0 ? dp[i-level[i]] : 0 ) + 1;
    25         ans = max(ans, dp[i+1]);
    26     }
    27     printf("%d
    ",n - ans);
    28     return 0;
    29 }
    Aguin

    CF 608 D Zuma

    不会捉。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 int c[555], dp[555][555];
     6 
     7 int main(void)
     8 {
     9     int n;
    10     scanf("%d", &n);
    11     for(int i = 1; i <= n; i++) scanf("%d", c + i);
    12     for(int i = 1; i <= n; i++)
    13         for(int j = i; j <= n; j++)
    14             dp[i][j] = (i == j ? 1 : n + 1 );
    15     for(int l = 2; l <= n; l++)
    16     {
    17         for(int s = 1; s + l - 1 <= n; s++)
    18         {
    19             for(int k = s; k < s + l - 1; k++)
    20                 dp[s][s+l-1] = min(dp[s][s+l-1], dp[s][k] + dp[k+1][s+l-1]);
    21             if(c[s] == c[s+l-1]) dp[s][s+l-1] = max(1, min(dp[s][s+l-1],dp[s+1][s+l-2]));
    22         }
    23     }
    24     printf("%d
    ", dp[1][n]);
    25     return 0;
    26 }
    Aguin

    CF 608 E Marbles

    不懂证。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 const int maxn = 1e6 + 10;
     6 int n, Next[maxn];
     7 char a[maxn], b[maxn];
     8 
     9 void getNext(void)
    10 {
    11     Next[0] = Next[1] = 0;
    12     for(int i = 1; i < n; i++)
    13     {
    14         int j = Next[i];
    15         while( j && b[i] != b[j]) j = Next[j];
    16         Next[i+1] = b[i] == b[j] ? j + 1 : 0;
    17     }
    18     return;
    19 }
    20 
    21 bool KMP(void)
    22 {
    23     getNext();
    24     int j = 0;
    25     for(int i = 0; i < n; i++)
    26     {
    27         while(j && b[j] != a[i]) j = Next[j];
    28         if(b[j] == a[i]) j++;
    29         if(i == n - 1 && j) return true;
    30     }
    31     return false;
    32 }
    33 
    34 int main(void)
    35 {
    36     scanf("%d", &n);
    37     n--;
    38     scanf("%s%s", a, b);
    39     for(int i = 0; i < n; i++)
    40     {
    41         if(b[i] == 'N') b[i] = 'S';
    42         else if(b[i] == 'S') b[i] = 'N';
    43         else if(b[i] == 'E') b[i] = 'W';
    44         else b[i] = 'E';
    45     }
    46     reverse(b, b + n);
    47     puts(KMP() ? "NO" : "YES");
    48     return 0;
    49 }
    Aguin

    12.25-12.26

    什么都没干。

  • 相关阅读:
    腾讯云 Centos 配置 JDK & Tomcat & Mysql
    JNI编程新手入门:Java和C++的超简单交互
    关于正则表达式的一些实际应用
    CAJ 转化为PDF
    Latex 大括号后多行输出
    Latex 安装
    Neo4j使用操作
    pip 升级操作
    venue recommendation —— 应用场景/用户分类
    Recbole安装及使用
  • 原文地址:https://www.cnblogs.com/Aguin/p/5065101.html
Copyright © 2011-2022 走看看