Ksenia and Pan Scales(思维题)

题目链接:http://codeforces.com/contest/382/problem/A

简要说明题目:输入一个字符串,并且含有字符“|”一个(除此之外输入只含有大写字母),表示分隔线,在分割线两边大写字母的个数分别表示相应重量(每个字母的重量相同)。然后再输入一个只含大写字母的字符串,判断是否能将字符串分配到"|"两边,如果能则输出分配后的结果,如果不能则输出“Impossible”。

代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. int main()
  6. {
  7. int a,b,c,i,k,p;
  8. int x,t;
  9. char st[20000],ts[20000];//分别用来储存第一行输入的字符串和第二行输入的字符串
  10. while(cin>>st>>ts)
  11. {
  12. a=b=c=0;
  13. for(i=0;st[i]!='|';i++)
  14. a++;
  15. for(i=strlen(st)-1;st[i]!='|';i--)
  16. b++;
  17. c=strlen(ts);
  18. if(a==b)
  19. {
  20. if(c%2==0)
  21. {
  22. for(i=0;i<c/2;i++)
  23. cout<<ts[i];
  24. cout<<st;
  25. for(i=c/2;i<c;i++)
  26. cout<<ts[i];
  27. cout<<endl;
  28. }
  29. else cout<<"Impossible"<<endl;
  30. }
  31. else
  32. {
  33. k=a>b?b:a;
  34. p=a>b?a:b;
  35. t=p-k;
  36. if(c==t)
  37. {
  38. if(a<b)
  39. {
  40. cout<<ts<<st<<endl;
  41. }
  42. else
  43. {
  44. cout<<st<<ts<<endl;
  45. }
  46. }
  47. else if(c<t) cout<<"Impossible"<<endl;
  48. else
  49. {
  50. if((c-t)%2==0)
  51. {
  52. x=t+(c-t)/2;
  53. if(a<b)
  54. {
  55. for(i=0;i<x;i++)
  56. cout<<ts[i];
  57. cout<<st;
  58. for(i=x;i<c;i++)
  59. cout<<ts[i];
  60. cout<<endl;
  61. }
  62. else
  63. {
  64. for(i=x;i<c;i++)
  65. cout<<ts[i];
  66. cout<<st;
  67. for(i=0;i<x;i++)
  68. cout<<ts[i];
  69. cout<<endl;
  70. }
  71. }
  72. else cout<<"Impossible"<<endl;
  73. }
  74. }
  75. }
  76. return 0;
  77. }


运行结果截图:


posted @ 2018-04-14 20:35  外号班长  阅读(127)  评论(0编辑  收藏  举报