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();
} 
京公网安备 11010502036488号