2014牡丹江现场赛水题

给出波兰式,推断其是否合法。假设不合法有两种操作:

1:任何位置加一个数字或者操作符

2:随意两个位置的元素对调

贪心模拟就可以

先推断数字数是否大于操作符数,若不大于 ans+=sum2-sum1+1;新增加的数字所有放到左端。

然后从左到右遍历一遍。存储到当前位置为止,数字数和sum1。和操作数和sum2

若sum2>=1sum1。优先与队尾的数字对调,若没有则sum1++,表示在最左端加一个数字

#include "stdio.h"
#include "string.h"
int main()
{
int n,sum1,sum2,i,len,ans,j,ok;
char str[1010];
scanf("%d",&n);
while (n--)
{
scanf("%s",str);
sum1=sum2=0;
len=strlen(str);
for (i=0;str[i];i++)
if (str[i]=='*') sum2++;
else sum1++; if (sum2==0)
{
printf("0\n");
continue;
}
if (sum1==0)
{
printf("%d\n",sum2+1);
continue;
} ans=0;
if (sum1<=sum2)
{
ans+=sum2-sum1+1;
sum2=0;
sum1=ans;
}
else sum1=sum2=0; for (i=0;str[i];i++)
{
if (str[i]<='9' && str[i]>='1') {sum1++; continue;}
if (str[i]=='*') sum2++; if (sum1>sum2) continue;
else
{
ok=0;
for (j=len-1;j>i;j--)
if(str[j]<='9' && str[j]>='1')
{
ans++;
sum1++;
sum2--;
str[j]='*';
ok=1;
break;
}
if (ok==0)
{
if (i==0)
{
ans+=2;
sum1+=2;
}
else
{
ans++;
sum1++;
}
}
}
}
if (str[len-1]!='*') ans++;
printf("%d\n",ans);
}
return 0;
}

最新文章

  1. 编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
  2. -XX:PermSize -XX:MaxPermSize 永久区参数设置
  3. java 21 - 7 IO流小结的图解
  4. 分享:大晚上用自己的锤子手机跨系统刷MIUI,跌宕起伏啊!!
  5. Shell cmd set note
  6. MySQL(六) —— 运算符和函数
  7. MyFragment
  8. [五]SpringMvc学习-Restful风格实现
  9. 功能:使用QQ号登陆,并加上微信和短信提醒,是否增量备份可选,阿里大鱼短信发送开发与测试,聚合数据(用JSON发短信,比较清楚)
  10. 去掉ExpandableListView的箭头图标
  11. eclipse安卓引入库项目的正确方法
  12. CodeForces 696A Lorenzo Von Matterhorn (LCA + map)
  13. The META for Mobile terminal
  14. Threading.local
  15. 登录页面和FORM的职责不对称,处理方法,刷新工作流程
  16. python绝技-运用python成为顶级黑客源代码
  17. spring mvc的工作原理
  18. node.js 找不到 xxx 模块解决办法
  19. JVM GC-----4、finalize()方法
  20. (转载)深入了解MyBatis参数

热门文章

  1. android 分享到QQ空间的全部操作
  2. Linux 程序设计学习笔记----Linux下文件类型和属性管理
  3. Bash脚本中的操作符
  4. &amp;lt;LeetCode OJ&amp;gt; 100. Same Tree
  5. 0x28 IDA*
  6. bzoj5216: [Lydsy2017省队十连测]公路建设
  7. 使用dbms_metadata.get_ddl遇到ORA-31603
  8. checkbox改写
  9. centos 部署 .net core runtime 环境
  10. IIS之虚拟目录学习