考场上死磕三个小时,大样例过了,以为能A结果WA了,WA的还是特殊性质数据,有哪位大神能帮本蒟蒻看看吗
#include<bits/stdc++.h>
using namespace std;
#define int long long
map<string,int>mp;
map<string,int>fg[105];
map<string,int>zy;
map<string,int>bl;
int l[105],r[105];
string lx[105][105];
string lxx[105];
int zdz[105],k[105];
string mmc[105][105];
string mc[105];
int kj[105][105];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
freopen("struct.in","r",stdin);
freopen("struct.out","w",stdout);
zy["byte"]=1,zy["short"]=2,zy["int"]=4,zy["long"]=8;
int n,jgts=0,bls=0;
cin>>n;
l[0]=r[0]=-1;
while(n--)
{
int opt;
cin>>opt;
if(opt==1){
jgts++;
string s;
cin>>s;
cin>>k[jgts];
mp[s]=jgts;
for(int i=1;i<=k[jgts];i++)
{
cin>>lx[jgts][i]>>mmc[jgts][i];
fg[jgts][mmc[jgts][i]]=i;
if(lx[jgts][i]=="byte"||lx[jgts][i]=="short"||lx[jgts][i]=="int"||lx[jgts][i]=="long")
{
zdz[jgts]=max(zdz[jgts],zy[lx[jgts][i]]);
kj[jgts][i]=((kj[jgts][i-1]+zy[lx[jgts][i-1]]+zy[lx[jgts][i]]-1)/zy[lx[jgts][i]])*zy[lx[jgts][i]];
}
else
{
zdz[jgts]=max(zdz[jgts],zdz[mp[lx[jgts][i]]]);
kj[jgts][i]=((kj[jgts][i-1]+zy[lx[jgts][i-1]]+zdz[mp[lx[jgts][i]]]-1)/zdz[mp[lx[jgts][i]]])*zdz[mp[lx[jgts][i]]];
}
}
zy[s]=((kj[jgts][k[jgts]]+zy[lx[jgts][k[jgts]]]+zdz[jgts]-1)/zdz[jgts])*zdz[jgts];
cout<<zy[s]<<" "<<zdz[jgts]<<"\n";
}
else if(opt==2)
{
bls++;
cin>>lxx[bls]>>mc[bls];
bl[mc[bls]]=bls;
if(lxx[bls]=="byte"||lxx[bls]=="short"||lxx[bls]=="int"||lxx[bls]=="long")l[bls]=((r[bls-1]+zy[lxx[bls]])/zy[lxx[bls]])*zy[lxx[bls]];
else l[bls]=((r[bls-1]+zdz[mp[lxx[bls]]])/zdz[mp[lxx[bls]]])*zdz[mp[lxx[bls]]];
r[bls]=l[bls]+zy[lxx[bls]]-1;
cout<<l[bls]<<"\n";
}
else if(opt==3){
string s;
cin>>s;
string ss;
int i=0;
int ans=0,zlx=0;
while(s[i]!='.'&&i<(signed)s.size())
{
ss.push_back(s[i]);
i++;
}
ans=l[bl[ss]],zlx=mp[lxx[bl[ss]]];
i++;
ss.clear();
while(i<(signed)s.size())
{
while(s[i]!='.'&&i<(signed)s.size())
{
ss.push_back(s[i]);
i++;
}
ans+=kj[zlx][fg[zlx][ss]];
zlx=mp[lx[zlx][fg[zlx][ss]]];
i++;
ss.clear();
}
cout<<ans<<"\n";
}
else{
int czx;
cin>>czx;
string ans;
if(czx>r[bls]){
cout<<"ERR\n";
continue;
}
int zlx=upper_bound(l+1,l+bls+1,czx)-l-1;
ans+=mc[zlx];
if(lxx[zlx]=="byte"||lxx[zlx]=="short"||lxx[zlx]=="int"||lxx[zlx]=="long long"){
cout<<ans<<"\n";
continue;
}
czx-=l[zlx];
zlx=mp[lxx[zlx]];
string zzlx;
while(1)
{
int sl=upper_bound(kj[zlx]+1,kj[zlx]+k[zlx]+1,czx)-kj[zlx]-1;
ans.push_back('.');
ans+=mmc[zlx][sl];
czx-=kj[zlx][sl];
zzlx=lx[zlx][sl];
zlx=mp[lx[zlx][sl]];
if(zlx==0){
break;
}
}
if(czx>=zy[zzlx]){
cout<<"ERR\n";
continue;
}
else cout<<ans<<"\n";
}
}
return 0;
}