• 寒假训练day1:Educational Round 101 (Rated for Div. 2)


    A题:https://codeforces.com/contest/1469/problem/A

    题意:给定一个由'('、'?'、')'组成的字符串,若可以通过将'?'改变为'('或者')',使得该字符串序列为合法的括号序列,则输出"Yes",否则输出"No",(注意本题说明,该字符串是只出现一对'('')',其余全部都是'?')

    思路:

      首先分析输出"No"的情况为:

        1.字符串的长度是奇数

        2.若')'出现在字符串的首部,或者'('出现在字符串的尾部,均不能找到合适的与之匹配

      对于其余情况,我们均可以通过就近原则将'?'改变,使其满足条件

    核心代码:

    while(t--) {
            string s;    cin >> s;
            if(s[0] == ')' || s[s.size() - 1] == '(' || s.size() % 2 == 1) cout << "No" << endl;
            else cout << "Yes" << endl;
        }

    B题:https://codeforces.com/contest/1469/problem/B

    题意:给出两个数字序列A,B,将A,B穿插在一起构成新的序列C,并且C的第一个元素是0,注意在构成序列C的过程中不能改变A、B中元素的先后位序,求序列C的最大前缀为多少。

    思路:既然求的是C的最大前缀,并且C是由A,B构成的,那么其实相当于是将A的一个前缀与B的一个前缀穿插起来构成了C,那么C的最大前缀一定是A的最大前缀和加上B的最大前缀和,所以我们只需要预处理一下A,B的前缀和,然后取最大值相加即可。

    核心代码:

    ll ans1 = 0, ans2 = 0, c = 0, d = 0;//c、d分别用来记录A,B当前的前缀和
    cin >> n;
    for(int i = 1; i <= n; i++) {
      cin >> a; c += a;
      ans1 = max(c, ans1);
    }
    cin >> m;
    for(int i = 1; i <= m; i++) {
      cin >> b; d += b;
      ans2 = max(d, ans2);
    }
    cout << ans1 + ans2 << endl;

  • 相关阅读:
    hdu 2569
    hdu 2571
    hdu 4540
    Linux:远程到linux的图形界面
    Windows:文件服务器,访问进去不能查看到完整的文件
    Linux:去除认证,加速 SSH登录
    Linux:永久修改网卡的MAC地址
    Loadrunner:LR提交JSON格式的POST请求
    Linux: vi 编辑器中文乱码
    自动化测试相关:Android SDK无法下载问题,不FQ的解决办法
  • 原文地址:https://www.cnblogs.com/ACM-Epoch/p/14213082.html
Copyright © 2020-2023  润新知