牛客编程巅峰赛S2第5场 - 青铜&白银&黄金

牛牛算数

https://ac.nowcoder.com/acm/contest/9556/A

A 牛牛算数

解题思路:按照题意求出中位数和平均值进行比较即可。
int Answerofjudge(vector<int>& arr) {
        // write code here
        long long sum=0;
        double mid,avg;
        int n=arr.size();
        sort(arr.begin(),arr.end());
        for(int i=0;i<n;++i)
        {
            sum+=arr[i];
        }
        avg=sum*1.0/n;
        if(n&1)mid=arr[n/2];
        else mid=1LL*(arr[n/2-1]+arr[n/2])*1.0/2;
        if(mid>avg)return 1;
        else if(mid<avg)return -1;
        else return 0;
    }

B 怕npy的牛牛

解题思路:利用双指针保存每段不同时包含npy三个字符的子串,比较每段满足条件的字串长度找到最大子串长。
int Maximumlength(string x) {
        int i,m=x.size(),n=0,p=0,y=0,mx=0,l=0;
        for(int i=0;i<m;++i)
        {
            if(x[i]=='n')n++;
            if(x[i]=='p')p++;
            if(x[i]=='y')y++;
            while(n>=1&&p>=1&&y>=1)
            {
                if(x[l]=='n')n--;
                if(x[l]=='p')p--;
                if(x[l]=='y')y--;
                l++;
            }
            mx=max(mx,i-l+1);
        }
        return mx;
    }

C 牛牛与后缀表达式

解题思路:用栈保存操作数,执行完一个运算以后就将结果放入栈中以备下次运算。
long long solve(string str) {
        // write code here
        stack<long long>s;
        long long tmp=0;
        for(int i=0;i<str.size();++i)
        {
            if(str[i]>='0'&&str[i]<='9')
                tmp*=10,tmp+=str[i]-'0';//字符串操作数转换成int型
            else if(str[i]=='#')
            {
                s.push(tmp);
                tmp=0;
            }
            else{ //操作符
                long long p1=s.top();
                s.pop();
                long long p2=s.top();//前面的表达式结果放在了栈中当前操作数后
                s.pop();
                switch(str[i])
                {
                    case '+':s.push(p2+p1);break;
                    case '-':s.push(p2-p1);break;
                    case '*':s.push(p2*p1);break;
                }
            }
        }
        return s.top();
    }


全部评论
^-^
1 回复 分享
发布于 2020-12-02 10:02

相关推荐

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