ZOJ 3829 (2014 牡丹江现场赛 K 题)
2014-10-16 18:45
274 查看
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829
题意:判断一个串用最小的步数变成RPN表达式。先是否为RPN表达式,是直接输出0,不是需经过2个变换,变为RPN表达式。 RPN 表达式: 正常的式子是 操作数 * 被操作数 RPN是 操作数*被操作数。一个串可以为多个RPN表达式,且只有操作数只有1到9,操作符值表示为 * 。一个数字也可以为一个RPN表达式。
变换: 1. 交换。任何2个字符都可以互相交换位置。
2. 插入。串中的任何一个位置都可以插入一个字符(数字和*均可)。
解题思路: 分四种情况讨论。1.当全为数字输出0。 2.当全为 * 时输出串的长度加1. 3. 设 * 的数量 s1,数字的数量 s2 ,当s2>=s1+1 4.s2<=s1;就很容易得出解。
AC代码:
#include<stdio.h>
#include<string.h>
int main()
{
int T,i,j,len,flag;
int t1,t2,s1,s2,s;
char str[1005],t;
scanf("%d",&T);
while(T--)
{
s1=s2=0;
scanf("%s",str);
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]=='*')
s1++;
else
s2++;
}
if(s1==0)
printf("0\n");
else if(s2==0)
printf("%d\n",s1+1);
else if(s2>=s1+1)
{
s=t1=t2=0;
for(i=0;i<len;i++)
if(str[i]=='*')
{
if(t2<=t1+1)
{
for(j=len-1;j>i;j--)
if(str[j]!='*')
{
t=str[j];
str[j]=str[i];
str[i]=t;
s++;
t2++;
break;
}
}
else
t1++;
}
else
t2++;
printf("%d\n",s);
}
else
{
s=t1=t2=0;
for(i=len-1;i>=0;i--)
if(str[i]!='*')
{
if(t2<=t1)
{
for(j=0;j<i;j++)
if(str[j]=='*')
{
t=str[j];
str[j]=str[i];
str[i]=t;
s++;
t2++;
break;
}
}
else
t1++;//星号;
}
else
t2++;//数字;
printf("%d\n",s+s1-s2+1);
}
}
return 0;
}
题意:判断一个串用最小的步数变成RPN表达式。先是否为RPN表达式,是直接输出0,不是需经过2个变换,变为RPN表达式。 RPN 表达式: 正常的式子是 操作数 * 被操作数 RPN是 操作数*被操作数。一个串可以为多个RPN表达式,且只有操作数只有1到9,操作符值表示为 * 。一个数字也可以为一个RPN表达式。
变换: 1. 交换。任何2个字符都可以互相交换位置。
2. 插入。串中的任何一个位置都可以插入一个字符(数字和*均可)。
解题思路: 分四种情况讨论。1.当全为数字输出0。 2.当全为 * 时输出串的长度加1. 3. 设 * 的数量 s1,数字的数量 s2 ,当s2>=s1+1 4.s2<=s1;就很容易得出解。
AC代码:
#include<stdio.h>
#include<string.h>
int main()
{
int T,i,j,len,flag;
int t1,t2,s1,s2,s;
char str[1005],t;
scanf("%d",&T);
while(T--)
{
s1=s2=0;
scanf("%s",str);
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]=='*')
s1++;
else
s2++;
}
if(s1==0)
printf("0\n");
else if(s2==0)
printf("%d\n",s1+1);
else if(s2>=s1+1)
{
s=t1=t2=0;
for(i=0;i<len;i++)
if(str[i]=='*')
{
if(t2<=t1+1)
{
for(j=len-1;j>i;j--)
if(str[j]!='*')
{
t=str[j];
str[j]=str[i];
str[i]=t;
s++;
t2++;
break;
}
}
else
t1++;
}
else
t2++;
printf("%d\n",s);
}
else
{
s=t1=t2=0;
for(i=len-1;i>=0;i--)
if(str[i]!='*')
{
if(t2<=t1)
{
for(j=0;j<i;j++)
if(str[j]=='*')
{
t=str[j];
str[j]=str[i];
str[i]=t;
s++;
t2++;
break;
}
}
else
t1++;//星号;
}
else
t2++;//数字;
printf("%d\n",s+s1-s2+1);
}
}
return 0;
}
相关文章推荐
- ZOJ 3829 Known Notation(字符串处理 数学 牡丹江现场赛)
- ZOJ 3823 Excavator Contest 构造 2014牡丹江现场赛E
- ZOJ 3829 Known Notation(字符串处理 数学 牡丹江现场赛)
- ZOJ 3829 Known Notation / 2014牡丹江区域赛 K (模拟, 贪心)
- ZOJ 3824 Fiber-optic Network 树形dp 2014牡丹江现场赛F
- 2014 牡丹江现场赛 i题 (zoj 3827 Information Entropy)
- 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-K ( ZOJ 3829 ) Known Notation
- ZOJ 3829 Known Notation (2014牡丹江H称号)
- zoj 3829 Known Notation(2014在牡丹江区域赛k称号)
- ZOJ 3829 2014牡丹江K 贪心
- 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-K ( ZOJ 3829 ) Known Notation
- ZOJ 3829 Known Notation (字符串处理 牡丹江现场赛K题)
- ZOJ 3829 Known Notation (2014牡丹江H题)
- zoj 3819(2014牡丹江现场赛 A题 )
- zoj 3820(2014牡丹江现场赛B题)
- zoj 3827(2014牡丹江现场赛 I题 )
- zoj 3820(2014牡丹江现场赛B题)
- ZOJ 3822 Domination /2014牡丹江现场赛D题 (dp)
- 2014 牡丹江现场赛 A.Average Score(zoj 3819) 解题报告
- zoj 3829 (2014牡丹江区域赛K) Known Notation