25pts,AC+WA+RE,求调
查看原帖
25pts,AC+WA+RE,求调
727185
TimelessWelkin楼主2024/10/3 22:43

rt,

#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
*/
2024/10/3 22:43
加载中...