每一个重复的数都只需要加最大的数就可以变成独一无二的,只需要找出重复的数有几个即可#include <bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; map<int,int>mp; int ans=0; for(int i=1;i<=n;i++){  int x;  cin>>x;  mp[x]++; } for(auto [u,v]:mp[x]){  ans+=v-1; } cout<<ans;}枚举字符串的插入位置和数字0-9,算出左右两边的中缀表达式,判断是否相等即可,技巧是用一个操作数栈,一个值栈模拟,当遇到乘号时,取栈顶两个数相乘,再插回去,加号不管,最后把栈中值相加就可以求出答案,解决乘法先算的问题。#include <bits/stdc++.h>using namespace std;#define int long longconst int N = 1e5 + 10;bool check(string s){    // cout << s << endl;    vector<char> p, q;    int f = 0;    for (int i = 0; i < s.size(); i++)    {        if (s[i] == '=')        {            f = 1;            continue;        }        if (!f)            p.push_back(s[i]);        else            q.push_back(s[i]);    }    stack<int> vp, vq;    stack<char> op, oq;    int r1 = 0, r2 = 0;    for (int i = 0; i < p.size(); i++)    {        if (p[i] >= '0' && p[i] <= '9')        {            int j = i;            int tmp = p[j] - '0';            while (j + 1 < p.size() && p[j + 1] >= '0' && p[j + 1] <= '9')            {                j++;                tmp = tmp * 10 + (p[j] - '0');            }            i = j;            vp.push(tmp);            if (op.size() && op.top() == '*')            {                op.pop();                int x1 = vp.top();                vp.pop();                int x2 = vp.top();                vp.pop();                vp.push(x1 * x2);            }        }        else        {            op.push(p[i]);        }    }    while (vp.size())    {        r1 += vp.top();        vp.pop();    }    for (int i = 0; i < q.size(); i++)    {        if (q[i] >= '0' && q[i] <= '9')        {            int j = i;            int tmp = q[j] - '0';            while (j + 1 < q.size() && q[j + 1] >= '0' && q[j + 1] <= '9')            {                j++;                tmp = tmp * 10 + (q[j] - '0');            }            i = j;            vq.push(tmp);            if (oq.size() && oq.top() == '*')            {                //  cout << tmp << " " << oq.top() << endl;                oq.pop();                int x1 = vq.top();                vq.pop();                int x2 = vq.top();                vq.pop();                vq.push(x1 * x2);            }        }        else        {            oq.push(q[i]);        }    }    while (vq.size())    {        r2 += vq.top();        vq.pop();    }    //  cout << r1 << " " << r2 << endl;    return r1 == r2;}bool solve(string &s){    for (char x = '0'; x <= '9'; x++)    {        string str = x + s;        // cout<<str<<endl;        if (check(str))            return 1;    }    for (int i = 0; i < s.size(); i++)    {        for (char j = '0'; j <= '9'; j++)        {            string str = s.substr(0, i + 1) + j + s.substr(i + 1);            // cout<<str<<endl;            if (check(str))                return 1;        }    }    return 0;}signed main(){    int t;    cin >> t;    while (t--)    {        string s;        cin >> s;        if (solve(s))            cout << "Yes" << endl;        else            cout << "No" << endl;    }}
点赞 3
评论 3
全部评论

相关推荐

07-11 10:56
门头沟学院 Java
码客明:大胆的说自己能实习6个月就行
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务