首页 > 其他分享 >Vanya and Brackets 题解

Vanya and Brackets 题解

时间:2023-08-05 19:15:00浏览次数:41  
标签:Vanya insert cur Brackets ++ 题解 ll 括号 size

题目传送门

一道枚举题。

枚举左括号和右括号的位置括号,为了答案最优,左括号只能在开头或者 * 的右边。右括号只能在末尾或者 * 的左边。每一次枚举都计算一下这个加了括号后表达式的值,最后取最大值即可。

Code

#include <bits/stdc++.h>
#define ll long long
#define INF 1e9
using namespace std;
string s, backup1;
ll ans, cur;
ll facrot();
ll term();
ll expr();
ll factor() {
    ll res = 0;
    if (s[cur] == '(') {
        cur++;
        res = expr();
        cur++;
    }
    else {
        while (1) {
            if (s[cur] >= '0' and s[cur] <= '9') {
                res = (res * 10 + s[cur] - '0');
                cur++;
            }
            else break;
        }
    }
    return res;
}
ll term() {
    ll res = factor();
    while (1) {
        if (s[cur] == '*') {
            cur++;
            res = res * factor();
        }
        else if (s[cur] == '/') {
            cur++;
            res = res / factor();
        }
        else break;
    }
    return res;
}
ll expr() { // 表达式求值
    ll res = term();
    while (1) {
        if (s[cur] == '+') {
            cur++;
            res += term();
        }
        else if (s[cur] == '-') {
            cur++;
            res -= term();
        }
        else break;
    }
    return res;
} 
signed main() {
    ios :: sync_with_stdio(0);
    cin >> s;
    backup1 = s;
    for (ll i = 0; i < s.size(); i++) {
        if (s[i] == '*' or i == 0) {
            if (i != 0) s.insert(i + 1, "(", 0, 1);
            else s.insert(i, "(", 0, 1);
            string backup2 = s;
            for (ll j = i + 1; j < s.size(); j++) {
                if (s[j] == '*' or j == s.size() - 1) {
                    cur = 0;
                    if (j != s.size() - 1) s.insert(j, ")", 0, 1);
                    else s.insert(j + 1, ")", 0, 1);
                    ans = max(ans, expr());
                }
                s = backup2;
            }
        }
        s = backup1;
    }  
    cout << ans;
    return 0;
}


标签:Vanya,insert,cur,Brackets,++,题解,ll,括号,size
From: https://www.cnblogs.com/xvl-/p/17608437.html

相关文章

  • Permutations 题解
    题目传送门一道枚举题。数据范围非常小,考虑暴力枚举全排列。可以dfs两次,第一次求出能使\(f(p)\)取得的最大值。第二次求出第\(m\)个排列。注意一下,第二次dfs的时候需要按字典序枚举。Code#include<bits/stdc++.h>#definelllonglong#defineINF1e9usingname......
  • Prefixes and Suffixes 题解
    题目传送门一道字符串题。我们考虑还原字符串后再一个一个的判断。很显然,这个字符串是由一个长度为\(n-1\)的前缀和后缀组成的。因此我们可以找到这\(2\)个长度为\(n\)的字符串,然后枚举哪个是前缀,哪个是后缀。值得注意的是,当你判断一个字符串为前缀时,如果后面出现了同样......
  • Educational Codeforces Round 151 (Rated for Div. 2) 题解
    A.ForbiddenInteger显然,当\(x\not=1\)时,直接输出\(n\)个\(1\)即可否则,如果\(n\)为奇数,那就输出\(\lfloor\frac{n}{2}\rfloor-1\)个\(2\)和\(3\);如果\(n\)为偶数,那就输出\(\frac{n}{2}\)个\(2\)(要看一下\(k\)的大小)B.ComeTogether因为Bob和Carol都......
  • 恋爱入门教学题解
    已知长度为\(n\)的三个两个实数序列\(A,B,X\),定义\(n\)个定义域为\(\R\)的函数\(f_1,f_2,\cdots,f_n\)。其中:\[f_k(x)=\sum_{i=1}^k|a_i(x-x_i)+b_i|\]现在,对于每一个\(k=1,2,\cdots,n\),求\(f_k\)的最小值。可以证明,最小值一定存在。\(n\le......
  • FJOI 树的重心题解
    从零开始暴切省选题题意简述给定一个\(n\)个点的树,每个点的编号从\(1\)至\(n\),问这个树有多少不同的连通子树,和这个树有相同的重心。分析1求重心首先要明确重心的定义。题目中给出:删掉某点\(i\)后,若剩余\(k\)个连通分量,那么定义\(d(i)\)为这些连通分量中点的个数......
  • P4850 [IOI2009] Raisins 题解
    前言:IOI还出这样水的纯记忆化搜索题?还是T4?真令人难以置信。题意:题目传送门一个N×M的矩阵,对于任意一个子矩阵,只能横着或竖着分割,并且分割一次的价值为改子矩阵的元素之和,现要将该矩阵分割成1×1的方格,求最小的分割总价值之和。思路:看到这是个最优化的题,且数据范围很......
  • P9437 『XYGOI round1』一棵树 题解
    赛时一眼换根dp,然后调调调了大概1h+。题目传送门什么是换根dp在大多数树形dp中,我们只考虑对根的贡献,而一部分题目需要算出对所有点的贡献,一个比较显然的做法是对每个点都跑一次树形dp,但是大大增加了时间复杂度,是我们不能接受的。树形dp中的换根dp问题又被称为二次扫......
  • 洛谷 P7911 [CSP-J 2021] 网络连接 题解
    写在前面一道普及级别的题目。CSP-J全国统一命题2021年第三题。本题解来自于一位真正的大佬。传送门https://www.luogu.com.cn/blog/xyf007/solution-p7911。题面信息来源于洛谷。请访问https://www.luogu.com.cn/problem/P7911。声明:本题解非商业用途,一切侵权行为请联系作......
  • We Were Both Childrent 题解
    将一个好理解的方法。题目说有n只青蛙,每只青蛙初始都在0位置,每秒会往前跳a_i。你可以在位置1到n设置一个陷阱,陷阱会抓住经过它的所有青蛙,求你最多能抓住多少青蛙。很简单,只要枚举质因数并判断是否合法即可。intn,ans=0;cin>>n;memset(cnt,0,sizeofcnt)......
  • Balanced Round 题解
    原题链接。题目大意给你一些数,问至少删掉多少数后两两不大于k。我们可以画图理解。最后我们取max(2,1),由于我们求的是合法的,所以还得用长度减去2,最终答案就是2。根据图我们就知道可以遍历一遍数组,用t记录下最长合法序列长度,最后用n-t即可。代码#include<bits/......