• Codeforces Hello 2019 ABCDF题解


    A. Gennady and a Card Game

    读不错题就写不错

    string s[6];
     
    int main() {
    #ifdef QvvQ
      // freopen("data.in", "r", stdin), freopen("data.out", "w", stdout);
      Dbg = 1;
    #endif
      in, s[0];
      lop1(i, 5) {
        in, s[i];
        if (s[i][0] == s[0][0] || s[i][1] == s[0][1]) return puts("YES"), 0;
      }
      puts("NO");
     
    #ifdef QvvQ
      fprintf(stderr, "
    time:%.5fms", clock() * 1.0 / CLOCKS_PER_SEC * 1000);
    #endif
      return 0;
    }
    

    B. Petr and a Combination Lock

    给出n个数的绝对值(正负可以任意),问是否有可能使得n个数的和是0

    (2^n) 子集枚举

    int main() {
    #ifdef QvvQ
      // freopen("data.in", "r", stdin), freopen("data.out", "w", stdout);
      Dbg = 1;
    #endif
      in, n;
      lop0(i, n) in, a[i];
      for (int S = 0; S < (1 << n); ++S) {
        int ans1 = 0, ans2 = 0;
        for (int i = 0; i < n; ++i) {
          if ((1 << i) & S) ans1 += a[i];
          else ans2 += a[i];
        }
        if (abs(ans1-ans2) % 360 == 0) return puts("YES"), 0;
      }
      puts("NO");
     
    #ifdef QvvQ
      fprintf(stderr, "
    time:%.5fms", clock() * 1.0 / CLOCKS_PER_SEC * 1000);
    #endif
      return 0;
    }
    

    C. Yuhao and a Parenthesis

    题意:给n个括号序列,如果 (s_i+s_j) 合法,那么这一对就可以匹配,问最多能匹配多少对(每个串只能用一次)

    假设在某个位置 前缀中)的数量多于(的数量,那么这个串就不能放在前面。同理如果某个位置后缀(多于),那么这个串就不能放在后面。

    既能放在前面又能放在后面的肯定自身就是一个合法串,可以任意匹配,剩下的用一个桶存起来两两匹配

    char s[MAXN * 5];
    int n, b[MAXN * 5], c[MAXN * 5];
    
    
    int main() {
    #ifdef QvvQ
      // freopen("data.in", "r", stdin), freopen("data.out", "w", stdout);
      Dbg = 1;
    #endif
      in, n;
      int ans = 0;
      lop1(i, n) {
        in, s + 1;
        int len = strlen(s + 1), tot1 = 0, tot2 = 0, can1 = 1, can2 = 1;
        lop1(j, len) {
          (s[j] == '(' ? tot1 : tot2)++;
          if (tot2 > tot1) can1 = 0;
        }
        tot1 = tot2 = 0;
        dlop1(j, len) {
          (s[j] == '(' ? tot1 : tot2)++;
          if (tot1 > tot2) can2 = 0;
        }
        if (can1 && can2) ++ans;
        else if (can1) ++b[tot1 - tot2];
        else if (can2) ++c[tot2 - tot1];
      }
      ans >>= 1;
      lop0(i,5e5) ans += min(b[i], c[i]);
      out, ans;
    #ifdef QvvQ
      fprintf(stderr, "
    time:%.5fms", clock() * 1.0 / CLOCKS_PER_SEC * 1000);
    #endif
      return 0;
    }
    

    为了骗访问量,请访问另一个链接

    D. Makoto and a Blackboard

    F. Alex and a TV Show

  • 相关阅读:
    SQL_Server_2005_数据类型转换函数(描述及实例)
    讨论:GUID与int自增列的问题
    SQL Server 2005无日志文件附加数据库
    优化SQL查询:如何写出高性能SQL语句
    开源项目之视频会议程序 Omnimeeting
    wzplayer player (android,windows,ios) 多核解码
    利用office2010 word2010生成目录
    利用office2010 word2010生成目录
    最近在忙活视频通话(sip)
    介绍几个在线画流程图的工具
  • 原文地址:https://www.cnblogs.com/storz/p/10224892.html
Copyright © 2020-2023  润新知