• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wchenfeng

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

2019年第十届蓝桥杯C/C++省赛B组试题I:后缀表达式

 

 

 例子:

输入

1 1
1 2 3

 输出

4

 

贪心算法 

#include<stdio.h>
#include<math.h>
int n,m,a,b,i;
int z[200005];
int f[200005];
long ans=0;
//m==0
void solve1()
{
     for(i=1;i<=a;i++)
          ans+=z[i];
     for(i=1;i<=b;i++)
          ans+=f[i];
}

//m!=0 && m<=b && a!=0 || m!=0 && m>b && b!=0
void solve2()
{
     for(i=1;i<=a;i++)
          ans+=z[i];     
     for(i=1;i<=b;i++)
          ans-=f[i];
}

//m!=0 && m>b && b==0 || m!=0 && m<=b && a==0
void solve3()
{
	 int maxs=-1000000000;
	 int mins=1000000000;
     if(a==0)
	 {     
          for(i=1;i<=b;i++)
		  {
               ans-=f[i];
               if(maxs<f[i])maxs=f[i];
          }
          ans=ans+maxs*2;
     }
     else
	 {      
          for(i=1;i<=a;i++){
               ans+=z[i];
              if(mins>z[i])mins=z[i];
          }
          ans=ans-2*mins;
     }
}
int main()
{
	 int i=1;
     int len;
     int sh;
     a=0,b=0;
	 scanf("%d%d",&n,&m);
	 len=n+m+1;
     for(i=1;i<=len;i++)
	 {
          scanf("%d",&sh);
          if(sh<0)
               f[++b]=sh;//负数
		  else z[++a]=sh;//正数         
     }
     if(m==0)
	 {
          solve1();
     }
     else{
          if((m<=b && a!=0) || (m>b && b!=0)){
               solve2();
          }
          if( (m>b && b==0) || ( m<=b && a==0)){
               solve3();
          }
     }
     printf("%d",ans);
	 return 0;
}

posted on 2022-04-12 20:03  王陈锋  阅读(48)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3