【求助】67pts,细节未知错误,带详细情况

P2830 写程序

AIH_NUI233 @ 2023-10-28 12:00:43

做法清奇qwqqq

  • 注释打了

  • 嵌套所有地方都已经考虑

  • 使用奇怪的map,不知此处是否会导致【除代码自生造成外的】TLE

  • 5 #9 TLE;

  • 6 WA:wrong answer On line 1 column 1, read -, expected 0;

  • 7 WA:wrong answer On line 2 column 1, read 3, expected 1.

#include <bits/stdc++.h>
#define re register
using namespace std;
int p,cnt=0;
map<string,int> to;//名字->int
map<pair<int,int>,int> w; //名-位置-值
map<string,int> sz;//名-大小
string s;

inline int getpos(string t){//寻找实际地址
    if(t[0]>='0'&&t[0]<='9'){
        int pos=0;
        for(re int i=0;i<t.size()-1;i++)
            pos=pos*10+t[i]-'0';
        return pos;
    }
    else if(t[0]=='-'){
        return -1;
    }
    else {//此结构(St~Ed)在代码中多次出现,由于个人原因未做整理
        string pos="";//St
        string name="";
        bool f=false;
        for(re int i=0;i<t.size()-1;i++){
            if(t[i]=='['&&(!f)){
                f=true;
                continue;
            }
            if(f) pos=pos+t[i];//下标递归用
            else name=name+t[i];//数组名
        }
        int poss=getpos(pos);//开始向[]内寻找
        if(poss<0||poss>=sz[name]) return -1;//Ed,下标 <0 或 >数组范围 时返回-1
        else return (w[make_pair(to[name],poss)]);
    }
}

int main(){
    while(!cin.eof()){
        cin>>s;
        if(s=="int") {//定义
            string nas;//数组
            cin>>nas;
            string name="";//St
            string size="";
            bool f=false;
            for(int i=0;i<nas.size()-1;i++){
                if(nas[i]=='['&&(!f)){
                    f=true;
                    continue;
                }
                if(f) size=size+nas[i];
                else name=name+nas[i];
            }
            int sizz=getpos(size);//实际下标
            if(sizz<=0){
                cout<<-1<<endl;
                return 0;
            }//Ed
            else{
                to[name]=cnt++;//把数组名转化为cnt
                for(int i=0;i<sizz;i++) w[make_pair(cnt,i)]=0;//初始化
                sz[name]=sizz;//数组大小
            }

            // cout<<size<<" "<<name<<" "<<sz[name]<<endl;
        }

        else if(s=="cout") {//输出
            string t;//地址
            cin>>t;
            bool f=false;
            string pos="";//St
            string name="";
            for(int i=0;i<t.size()-1;i++){
                if(t[i]=='['&&(!f)){
                    f=true;
                    continue;
                }
                if(f) pos=pos+t[i];
                else name=name+t[i];
            }
            int poss=getpos(pos);
            if(poss<0||poss>=sz[name]){
                cout<<-1<<endl;
                return 0;
            }//Ed
            else cout<<w[make_pair(to[name],poss)]<<endl;//见定义时理解
        }
        else{
            int inf;
            cin>>inf;
            bool f=false;
            string pos="";//St
            string name="";
            for(int i=0;i<s.size()-1;i++){
                if(s[i]=='['&&(!f)){
                    f=true;
                    continue;
                }
                if(f) pos=pos+s[i];
                else name=name+s[i];
            }
            int poss=getpos(pos);
            if(poss<0||poss>=sz[name]){
                cout<<-1<<endl;
                return 0;
            }//Ed
            else w[make_pair(to[name],poss)]=inf;
        }
    }
    return 0;
}

求调,不胜感激qwqqq


by _Spectator_ @ 2023-10-28 13:00:25

int a[5]

您直接就输出了 -1


by AIH_NUI233 @ 2023-10-28 13:39:14

@sto_yfz_orz 感谢感谢,我看看


by AIH_NUI233 @ 2023-10-28 13:50:04

@sto_yfz_orz 这波是失误,第 13t.size()-1 应改为 t.size() ,但是为什么改完后 \#6WA 变成了 RE ?qwqqq


by AIH_NUI233 @ 2023-10-28 13:52:00

@sto_yfz_orz 按照题意int a[0]是否会爆-1


by _Spectator_ @ 2023-10-28 14:39:44

@AIH_NUI233 int a[0] 不会爆,但如果后面访问了 a 就会爆


by _Spectator_ @ 2023-10-28 14:40:26

RE 的话读入写成 while(cin>>s)


by _Spectator_ @ 2023-10-28 14:49:59

int a[5]
int b[5]
a[1] b[1]
cout a[1]

您似乎没有考虑这种?


by AIH_NUI233 @ 2023-10-28 15:08:00

@sto_yfz_orz emmm在最新的版本中考虑到了,导致W、T的点(\#5 ,\#6,\#9)全变成了RE。。qwqq


by AIH_NUI233 @ 2023-10-28 15:09:47

@sto_yfz_orz 改了while后只剩下\#9是WA了,感谢大佬,我再试试awaa


by AIH_NUI233 @ 2023-10-28 16:42:39

感谢大佬,以A,此贴结


| 下一页