admin管理员组文章数量:1530882
题目链接:点击打开链接
题目大意:略。
解题思路:注意:“return 0;” 的时候别只输了个 “return” 就退出了,要输完,否则 T-- 会消耗掉一次,导致结果WA。
AC 代码
#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a)
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
struct node
{
int len,flag; // 数组长度 是否泄漏
string txt,name; // 内容 数组名
}nds[11000];
map<string,int> mp;
map<string,int>::iterator itmp;
void init()
{
mp.clear();
}
void showNode(int op,string name)
{
itmp=mp.begin();
while(itmp!=mp.end())
{
if(op==1)
{
node nd=nds[itmp->second];
cout<<nd.name<<": ";
cout<<nd.len<<endl;
puts("------------------------------");
}
else if(op==2)
{
if(itmp->first==name)
{
node nd=nds[itmp->second];
cout<<nd.name<<": "<<endl;
cout<<"len: "<<nd.len<<endl;
cout<<"flag: "<<nd.flag<<endl;
cout<<"txt: "<<nd.txt<<endl;
puts("------------------------------");
}
}
itmp++;
}
}
int main()
{
int T; scanf("%d",&T);
int n;
string s,ss,sss;
while(T--)
{
init();
int nlen=0;
while(1)
{
cin>>s;
char op=s[3];
if(op=='r') // char
{
while(cin>>ss)
{
char name[11000];
int len=ss.length(),k=0;
int i;
for(i=0;i<len;i++)
{
if(ss[i]=='[')
{
name[k++]='\0';
break;
}
else
name[k++]=ss[i];
}
int sum=0;
for(++i;i<len;i++)
{
if(ss[i]==']')
break;
else
sum=sum*10+(ss[i]-'0');
}
node nd; nd.flag=0,nd.len=sum,nd.txt="",nd.name=string(name);
mp[nd.name]=++nlen;
nds[nlen]=nd;
if(ss[len-1]==';') break;
}
// showNode(1,"");
}
else if(op=='s') // gets
{
cin>>ss; getchar();
getline(cin,sss);
int len=sss.length();
node &nd=nds[mp[ss]];
if(len>=nd.len)
{
nd.flag=1;
nd.txt=sss.substr(0,nd.len);
}
else
{
nd.flag=0;
nd.txt=sss;
}
// showNode(2,ss);
}
else if(op=='t') // cout
{
cin>>ss;
int i=mp[ss];
while(i<=nlen)
{
node nd=nds[i];
cout<<nd.txt;
if(nd.flag==1)
i++;
else
break;
}
puts("");
}
else if(op=='u') // return
{
cin>>ss;
break;
}
}
}
return 0;
}
版权声明:本文标题:ZCMU - 2018: Memory leak 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1725281405a1016551.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论