360笔试4.22

  • 每一个重复的数都只需要加最大的数就可以变成独一无二的,只需要找出重复的数有几个即可
#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 long
const 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;
    }
}

全部评论
牛友是在官网投的?我 4.8 投的 360,现在还在简历筛选😅
点赞
送花
回复
分享
发布于 04-21 15:48 陕西
今天不是421吗
点赞
送花
回复
分享
发布于 04-21 23:24 广东
秋招专场
校招火热招聘中
官网直投

相关推荐

2 2 评论
分享
牛客网
牛客企业服务