比赛 20121030 评测结果 AWAAAEEAEA
题目名称 外星密码 最终得分 60
用户昵称 Cloud 运行时间 0.236 s
代码语言 C++ 内存使用 3.15 MiB
提交时间 2012-10-30 19:52:03
显示代码纯文本
  1. #include<cstring>
  2. #include<fstream>
  3. #include<stack>
  4. using namespace std;
  5. int main(void)
  6. {
  7. ifstream fin("passworda.in");
  8. ofstream fout("passworda.out");
  9. stack<int> sk;
  10. string st;
  11. char s[20001];
  12. char ans[20001];
  13. int i,j=0,k=0;
  14. int num,p=0,q;
  15. bool f=0;
  16. fin>>st;
  17. for(i=0;i<st.size();i++)
  18. {
  19. if(st[i]>='A'&&st[i]<='Z')
  20. {
  21. if(f)
  22. {
  23. s[j]=st[i];
  24. j++;
  25. }
  26. else
  27. {
  28. ans[k]=st[i];
  29. k++;
  30. }
  31. }
  32. if(st[i]=='[')
  33. {
  34. sk.push(0);
  35. f=1;
  36. }
  37. if(st[i]>='0'&&st[i]<='9')
  38. {
  39. num=st[i]-'0';
  40. if(st[i+1]>='0'&&st[i+1]<='9')
  41. {
  42. num=num*10+(st[i+1]-'0');
  43. i++;
  44. }
  45. sk.push(num);
  46. }
  47. if(st[i]==']')
  48. {
  49. int n;
  50. n=j;
  51. num=sk.top(),sk.pop();
  52. for(p=1;p<num;p++)
  53. for(j=0;j<n;j++)
  54. s[p*n+j]=s[j];
  55. sk.pop();
  56. j=(num-1)*n+j;
  57. if(sk.empty())
  58. {
  59. n*=num;
  60. for(j=0;j<n;j++,k++)
  61. ans[k]=s[j];
  62. j=0;
  63. f=0;
  64. }
  65. }
  66. }
  67. for(i=0;i<k;i++)
  68. fout<<ans[i];
  69. fin.close();
  70. fout.close();
  71. return 0;
  72. }