BUPT的新生赛,做着玩玩!
Strings calculateSubmit: 409 Accepted:116Time Limit: 1000MS Memory Limit: 65536K
Description
heimengnan最近学习了字符串。他想到整数和浮点数可以做加、减、乘等的运算,那么字符串之间是不是也能做运算呢?
给定字符串s1与s2 有如下的三种运算
+,-, *
s1与s2运算后的结果字符串中的字符要按照字典顺序(abcdef…z这个顺序就是字典序)重新排列后输出。s1和s2可能不以字典顺序给出,s1,与s2中只会出现a,b,c,d,…,z这26个字符。
+(加) 运算:
将s1与s2 中出现的字符相加。即把在s1与s2中的同一字符的个数的和作为结果字符串中该字符的个数。
(如果a在s1中出现1次,在s2中出现10次,那么a会在结果字符串中出现11次,b在s1中出现5次,在s2中未出现,那么b在结果字符串中出现5次。)
例如:
aabbddeaacdemk + kkbmsaa 的结果为 aaaaaabbbcdddeekkkmms
-(减) 运算:
将s1与s2中出现的字符相减。即把在s1与s2中的同一字符的个数的差的绝对值作为结果字符串中该字符的个数。
(如果a在s1中出现3次,在s2中出现 1次,那么a会在结果字符串中出现2次。如果b在s1中未出现,在s2中出现2次,那么b会在结果字符串中出现2次。)
例如:
aabbddeaacdemk – kkbmsaa 的结果为 aabcdddeeks
* (乘) 运算:
将s1与s2中出现的字符相乘,即把在s1与s2中的同一字符的个数的积作为结果字符串中该字符的个数。
(如果a在s1中出现3次,在s2中出现 7次,那么a会在结果字符串中出现21次。如果b在s1中未出现,在s2中出现100次,那么b会在结果字符串中也不会出现即0次。)
例如:
aabbddeaacdemk * kkbmsaa 的结果为 aaaaaaaabbkkm
Input
首先是一个整数t 代表测试数据的组数,然后是 t组运算式,每组运算式有三个部分:
s1 运算符 s2
s1,运算符,s2三个部分会用两个空格分隔,s1与s2中只可能出现a,b,c,d,e,…,z 26个小写字母。
s1,s2的长度小于1000,结果字符串的长度不会超过1000000。
Output
结果字符串,其中的字符按照字典书序排列,如果结果是空字符串,那么直接输出空行。
Sample Input
3
aabbddeaacdemk + kkbmsaa
aabbddeaacdemk - kkbmsaa
aabbddeaacdemk * kkbmsaa
Sample Output
aaaaaabbbcdddeekkkmms
aabcdddeeks
aaaaaaaabbkkm
Hint
建议使用scanf(“%s”,s);读入字符串
Source
heimengnan
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
char s1[1001],s2[1001],fuhao;
bool cmp(char a,char b)
{
return a<b;
}
int main()
{
int n,i,j,l1,l2,num1,num2,count1,count2;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
scanf("%d",&n);
while(n--)
{
scanf("%s ",s1);
scanf("%c",&fuhao);
scanf("%s ",s2);
l1=strlen(s1);l2=strlen(s2);
sort(s1,s1+l1,cmp);
sort(s2,s2+l2,cmp);
if(fuhao=='+')
{
num1=0;num2=0;
for(i=1;i<=26;i++)
{
count1=0;count2=0;
while(s1[num1]<='a'+i-1&&num1<l1)
{
num1++;
if(s1[num1]=='a'+i-1);
count1++;
}
while(s2[num2]<='a'+i-1&&num2<l2)
{
num2++;
if(s2[num2]=='a'+i-1);
count2++;
}
for(j=1;j<=count1+count2;j++)
printf("%c",'a'+i-1);
}
printf("/n");
}
else
if(fuhao=='-')
{
num1=0;num2=0;
for(i=1;i<=26;i++)
{
count1=0;count2=0;
while(s1[num1]<='a'+i-1&&num1<l1)
{
num1++;
if(s1[num1]=='a'+i-1);
count1++;
}
while(s2[num2]<='a'+i-1&&num2<l2)
{
num2++;
if(s2[num2]=='a'+i-1);
count2++;
}
int cha;
if(count1-count2>0) cha=count1-count2;
else cha=count2-count1;
for(j=1;j<=cha;j++)
printf("%c",'a'+i-1);
}
printf("/n");
}
else
if(fuhao=='*')
{
num1=0;num2=0;
for(i=1;i<=26;i++)
{
count1=0;count2=0;
while(s1[num1]<='a'+i-1&&num1<l1)
{
num1++;
if(s1[num1]=='a'+i-1);
count1++;
}
while(s2[num2]<='a'+i-1&&num2<l2)
{
num2++;
if(s2[num2]=='a'+i-1);
count2++;
}
for(j=1;j<=count1*count2;j++)
printf("%c",'a'+i-1);
}
printf("/n");
}
}
return 0;
}