#include<iostream>
#include<unordered_map>
#include<vector>
using namespace std;
typedef long long ll;
const int N=110;
int n;
bool A=1;
struct query{
int op,k;
ll addr;
string s,t,n;
}q[N];
typedef pair<ll,ll> pli;//第一维表示大小,第二维表示要求
#define sz first
#define yk second
vector<string>p[N];
namespace sol_b{
unordered_map<string,pli>str;
void sol(){
str["byte"]={1,1};
str["short"]={2,2};
str["int"]={4,4};
str["long"]={8,8};
for(int i=1;i<=n;++i){
if(q[i].op==1){
string s=q[i].s;
ll idx=0;
ll fyk=0;
for(string &v:p[i]){
pli now=str[v];
ll yk=now.yk;
fyk=max(yk,fyk);
idx=(idx+yk-1)/yk*yk;
idx+=now.sz;
}
idx=(idx+fyk-1)/fyk*fyk;
cout<<idx<<' '<<fyk<<'\n';
str[s]={idx,fyk};
}
}
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
// freopen("struct3.out","w",stdout);
#endif
// ios::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
cin>>n;
for(int i=1;i<=n;++i){
cin>>q[i].op;
switch(q[i].op){
case 1:{
A=0;
cin>>q[i].s>>q[i].k;
vector<string>&g=p[i];
for(int j=1;j<=q[i].k;++j){
string t,n;
cin>>t>>n;
g.push_back(t);
}
break;
}
case 2:
cin>>q[i].t>>q[i].n;
break;
case 3:
cin>>q[i].s;
break;
default:
cin>>q[i].addr;
}
}
using namespace sol_b;
sol();
return 0;
}
以上代码仅针对操作1。经查验,最大的大样例将所有1操作的答案提取出来,与此程序输出一致,请大佬帮忙看看是什么问题。