比赛 |
20121030 |
评测结果 |
AWAAWWWAWA |
题目名称 |
外星密码 |
最终得分 |
50 |
用户昵称 |
yuan |
运行时间 |
0.005 s |
代码语言 |
C++ |
内存使用 |
3.15 MiB |
提交时间 |
2012-10-30 21:15:27 |
显示代码纯文本
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
int i,j,n,p,right,left;
string com_text="",text="",prefix="",suffix="",s="",t;
ifstream fin("passworda.in");
ofstream fout("passworda.out");
fin>>com_text;
p=com_text.find('[');
prefix=com_text.substr(0,p);//获取前缀
com_text.erase(0,p);//删除前缀
p=com_text.find_last_of(']');
if(p+1<com_text.length())//获取后缀
{
suffix=com_text.substr(p+1,com_text.length()-p);
com_text.erase(p+1);//删除后缀
}
n=com_text.length();//剩余的中间的压缩部分
//获取重复的字符串
if(n>0)
{
p=com_text.find(']');
if(p>0)right=p-1;//字母部分右边界
for(i=0;i<n;i++)if(com_text[i]>='A'&&com_text[i]<='Z'){left=i;break;}//字母左边界
if(left<=right)s=com_text.substr(left,right-left+1);//取出字母串
//获取重复部分的数字
if(left>0)//有多重压缩
{
com_text.erase(left);//删除字母以后的字符,只剩下数字和'['
p=com_text.find_last_of('[');
text=s;
while(p>=0)//获取每一个数字并更新text
{
i=p;//'['位置
n=0;
while(i+1<com_text.length()&&com_text[i+1]>='0'&&com_text[i+1]<='9')i++;//数字右边界
for(j=p+1;j<=i;j++)n=n*10+com_text[j]-'0';//取数字
if(n>1)
{
t="";
for(j=1;j<=n;j++)t=t+text;
text=t;
}
com_text.erase(p);//删除取过的数字及其前面的'['
p=com_text.find_last_of('[');//获取下一个'['
}
}
}
fout<<prefix+text+suffix<<endl;//输出
fin.close();fout.close();
return 0;
}