rt,
P9754 结构体
25pts求调(码风不良,见谅)
#include<bits/stdc++.h>
using namespace std;
struct jgt{
string types[105];
string names[105];
long long maxsize,geshu;
string thisname;
}a[105];
struct dingyi{
string Type,Name;
long long qidian,zhongdian;
}b[3000005];
long long jgtcmp=0,dycmp=0,nowsize=-1;
map<string ,long long>Size;
void Fen(string t,string n,long long dian){
if(t=="short"||t=="int"||t=="byte"||t=="long")return ;
for(long long i=1;i<=jgtcmp;i++){
if(a[i].thisname==t){
for(long long k=1;k<=a[i].geshu;k++){
++dycmp;
b[dycmp].Type=a[i].types[k];
b[dycmp].Name=n+"."+a[i].names[k];
b[dycmp].qidian=dian+(k-1)*a[i].maxsize;
b[dycmp].zhongdian=dian+(k-1)*a[i].maxsize+Size[a[i].types[k]]-1;
Fen(b[dycmp].Type , b[dycmp].Name,b[dycmp].qidian);
}
}
}
}
int main(){
Size["byte"]=1;
Size["short"]=2;
Size["int"]=4;
Size["long"]=8;
long long n;
scanf("%lld",&n);
while(n--){
long long op;
scanf("%lld",&op);
if(op==1){
++jgtcmp;
cin>>a[jgtcmp].thisname>>a[jgtcmp].geshu;
for(long long i=1;i<=a[jgtcmp].geshu;i++){
cin>>a[jgtcmp].types[i]>>a[jgtcmp].names[i];
a[jgtcmp].maxsize=max(a[jgtcmp].maxsize,Size[a[jgtcmp].types[i]]);
}
Size[a[jgtcmp].thisname]=a[jgtcmp].maxsize*a[jgtcmp].geshu;
cout<<Size[a[jgtcmp].thisname]<<" "<<a[jgtcmp].maxsize<<endl;
}
if(op==2){
string t,n;
cin>>t>>n;
++dycmp;
b[dycmp].Name=n;
b[dycmp].Type=t;
b[dycmp].qidian=++nowsize;
b[dycmp].zhongdian=nowsize+Size[t]-1;
nowsize=nowsize+Size[t]-1;
cout<<b[dycmp].qidian<<endl;
Fen(t,n,b[dycmp].qidian);
}
if(op==3){
string s;
cin>>s;
for(long long i=1;i<=dycmp;i++)
if(b[i].Name==s)cout<<b[i].qidian<<endl;
}
if(op==4){
long long addr;bool B=0;
cin>>addr;
for(long long i=1;i<=dycmp;i++){
if(b[i].Type=="short"||b[i].Type=="byte"||b[i].Type=="int"||b[i].Type=="long"){
if(b[i].qidian<=addr&&addr<=b[i].zhongdian){
cout<<b[i].Name<<"\n";
B=1;
break;
}
}
}
if(!B){
cout<<"ERR\n";
}
}
}
return 0;
}
/*
5
1 a 2
short aa
long long ab
1 b 2
a ba
long bb
2 b x
3 x.ba.ab
4 10
*/