zoukankan      html  css  js  c++  java
  • Gym 100507H

    题目链接:http://codeforces.com/gym/100507/attachments

    ----------------------------------------------------------------------------

    刚看这题的时候感觉是区间$DP$ 然而复杂度一直停留在$O(n^3)$优化不下来

    后来又瞎试了一些贪心 都在较大的数据上挂掉了

    反复琢磨着大写字母和相应小写字母匹配 便想到了以前做过的括号匹配

    只不过此题大写字母和小写字母的左右关系是不限制的

    因此可以用一个栈来辅助贪心

    如果当前加入的新的字母可以直接和栈顶匹配就直接让它们匹配

    否则先丢在栈顶放着(防止做了这个匹配后使得匹配线之间的字母被限制住无法匹配)

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <algorithm>
     5 using namespace std;
     6 const int N = 10010;
     7 char s[N];
     8 int sta[N];
     9 int ma[N], ans[N], num[N];
    10 int n, len, top;
    11 int main()
    12 {
    13     scanf("%d%s", &n, s + 1);
    14     len = n << 1;
    15     for(int i = 1; i <= len; ++i)
    16         if(!top || abs((int)s[sta[top - 1]] - s[i])!= 32)
    17             sta[top++] = i;
    18         else
    19         {
    20             ma[i] = sta[top - 1];
    21             ma[sta[top - 1]] = i;
    22             --top;
    23         }
    24     if(top)
    25     {
    26         puts("Impossible");
    27         return 0;
    28     }
    29     for(int i = 1; i <= len; ++i)
    30         if(s[i] < 'a')
    31             num[i] = num[i - 1];
    32         else
    33             num[i] = num[i - 1] + 1;
    34     for(int i = 1; i <= len; ++i)
    35         if(s[i] < 'a')
    36             printf("%d ", num[ma[i]]);
    37 }
  • 相关阅读:
    Nacos 1.4.0 集群搭建
    docker mysql5.7
    java设计模式之简单工厂模式
    关于兑现
    Linux用户相关
    centos7开机自启动
    Shell脚本记录日志到文件
    .NetCore常用单元测试框架
    Exchange邮件开发
    Spark——Yarn模式下的日志存储及配置
  • 原文地址:https://www.cnblogs.com/sagitta/p/5843194.html
Copyright © 2011-2022 走看看