Ksenia and Pan Scales(思维题)
题目链接:http://codeforces.com/contest/382/problem/A
简要说明题目:输入一个字符串,并且含有字符“|”一个(除此之外输入只含有大写字母),表示分隔线,在分割线两边大写字母的个数分别表示相应重量(每个字母的重量相同)。然后再输入一个只含大写字母的字符串,判断是否能将字符串分配到"|"两边,如果能则输出分配后的结果,如果不能则输出“Impossible”。
代码:
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- using namespace std;
- int main()
- {
- int a,b,c,i,k,p;
- int x,t;
- char st[20000],ts[20000];//分别用来储存第一行输入的字符串和第二行输入的字符串
- while(cin>>st>>ts)
- {
- a=b=c=0;
- for(i=0;st[i]!='|';i++)
- a++;
- for(i=strlen(st)-1;st[i]!='|';i--)
- b++;
- c=strlen(ts);
- if(a==b)
- {
- if(c%2==0)
- {
- for(i=0;i<c/2;i++)
- cout<<ts[i];
- cout<<st;
- for(i=c/2;i<c;i++)
- cout<<ts[i];
- cout<<endl;
- }
- else cout<<"Impossible"<<endl;
- }
- else
- {
- k=a>b?b:a;
- p=a>b?a:b;
- t=p-k;
- if(c==t)
- {
- if(a<b)
- {
- cout<<ts<<st<<endl;
- }
- else
- {
- cout<<st<<ts<<endl;
- }
- }
- else if(c<t) cout<<"Impossible"<<endl;
- else
- {
- if((c-t)%2==0)
- {
- x=t+(c-t)/2;
- if(a<b)
- {
- for(i=0;i<x;i++)
- cout<<ts[i];
- cout<<st;
- for(i=x;i<c;i++)
- cout<<ts[i];
- cout<<endl;
- }
- else
- {
- for(i=x;i<c;i++)
- cout<<ts[i];
- cout<<st;
- for(i=0;i<x;i++)
- cout<<ts[i];
- cout<<endl;
- }
- }
- else cout<<"Impossible"<<endl;
- }
- }
- }
- return 0;
- }
运行结果截图: