zoukankan      html  css  js  c++  java
  • 寒假训练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;

  • 相关阅读:
    单div绘制多元素图
    js笔试题系列之二——数组与对象
    JS设计模式——策略模式
    js笔试题系列之三——函数
    zepto.js中的Touch事件
    java定时任务之Scheduled注解
    汤姆大叔送书,咱也科学抢书
    Asp.net Mvc自定义客户端验证(CheckBox列表的验证)
    摆脱烂项目
    我的ORM发展史
  • 原文地址:https://www.cnblogs.com/ACM-Epoch/p/14213082.html
Copyright © 2011-2022 走看看