ZCMU - 2018: Memory leak

简介: ZCMU - 2018: Memory leak

题目链接:点击打开链接

题目大意:略。

解题思路:注意:“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;
}
目录
相关文章
|
3月前
|
监控 数据处理 算法框架/工具
Allocation of 179437568 exceeds 10% of free system memory.
本文讨论了在Python编程中遇到的"Allocation of XXXX exceeds 10% of free system memory"错误,并提供了几种解决方法,包括调整代码逻辑以减少内存分配和更改批量大小。
|
6月前
PGA memory operation
PGA memory operation
65 1
|
6月前
|
安全 数据处理 C#
深入理解C#中的Span<T>和Memory<T>
【1月更文挑战第8天】本文旨在探讨C#中引入的两个重要类型:Span<T>和Memory<T>。它们为开发者提供了一种高效且安全的方式来处理内存中的数据。文章首先介绍这两个类型的基本概念和用途,接着深入分析它们的工作原理和适用场景,并通过代码示例展示如何在实际应用中使用它们。
|
Docker 容器
解决Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory.
解决Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory.
1210 0
|
存储 缓存 算法
JVM学习(三):聊聊内存泄漏(memory leak)
可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否还被引用。那么对于这种情况下,由于代码的实现不同就会出现很多种内存泄漏问题(让JVM误以为此对象还在引用中,无法回收,造成内存泄漏)。
340 0
JVM学习(三):聊聊内存泄漏(memory leak)
|
缓存
关于renderInContext方法内存管理 memory warning
关于renderInContext方法内存管理 memory warning
586 0