牛客编程巅峰赛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(); }