C~K的天平
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
C~K 有一个神奇的天平和一些砝码,砝码用 A 表示,每个砝码的质量都一样,现在天平上已经有了一些砝码。
C~K 手中还有一些没有用的砝码,现在 C~K 想知道他手中的砝码能不能让天平平衡。C~K 有一个神奇的天平和一些砝码,砝码用 A 表示,每个砝码的质量都一样,现在天平上已经有了一些砝码。
C~K 手中还有一些没有用的砝码,现在 C~K 想知道,把他手中的砝码都用上,能不能让天平平衡?
Input
多组输入。
对于每组数据:
第一行输入一个字符串 s1,代表现在天平的两个盘中已有的砝码,用 '|' 隔开 (len(s1) <= 10000)
第二行输入一个字符串 s2,代表 C~K 可用的砝码 (len(s2) <= 10000)
Output
如果可以使天平平衡,则输出天平平衡时的状态,否则输出 “Impossible”(不包括引号)。
Example Input
AA|A
A
A|A
A
Example Output
AA|AA
Impossible
Hint
Author
「山东理工大学第一届ACM知识挑战赛(机试)」C~K
#include <iostream>
#include <string.h>
using namespace std;
int z(int n)
{
if(n<0)
n = -n;
return n;
}
int max(int l,int r)
{
if(l>r)
return l;
else
return r;
}
char s[10010],com[10010];
int main()
{
while(cin>>s)
{
cin>>com;
int l = 0,r = 0,len,len2;
len = strlen(s);
len2 = strlen(com);
for(int i = 0;i<len;i++)
{
if(s[i]=='|')
{
l = i;
break;
}
}
r = len - 1 - l;
int k = z(l - r);
if((len2-k)>=0&&(len2-k)%(2)==0)
{
int sum = max(l,r)+(len2-k)/(2);
for(int i = 0;i<sum;i++)
{
cout<<'A';
}
cout<<'|';
for(int i = 0;i<sum;i++)
{
cout<<'A';
}
cout<<endl;
}
else
{
cout<<"Impossible"<<endl;
}
}
}