求check
  • 板块学术版
  • 楼主Ice_function
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/22 14:42
  • 上次更新2023/11/2 11:54:21
查看原帖
求check
550471
Ice_function楼主2023/10/22 14:42

lg 5分

#include <bits/stdc++.h>
using namespace std;

const int N=2e6+10;

int q;

map <string,int> tran,sta,Sto;int cnt,cna;

int add[N],inS[N],Sst,Send;
int star[N],start[N];




map <int,string> NtoS;int S;
struct tempority{string type,name;}temp[N];

int main()
{
	//freopen("struct.in","r",stdin);
	//freopen("struct.out","w",stdout);
	
	scanf("%d",&q);
	sta["byte"]=1,sta["short"]=2,sta["int"]=4,sta["long"]=8;
	cna=-1;
	while (q--)
	{
		int op;
		scanf("%d",&op);
		if (op==1)
		{
			Sst=cna+1;
			string Sname;int k;
			cin>>Sname>>k;
			int r;
			int dui=0,size=0;
			for (int i=1;i<=k;i++)
			{
				string type,name;
				cin>>type>>name;
				int r2;
				temp[i].type=type,temp[i].name=name;
				dui=max(dui,sta[type]);
			}
			for (int i=1;i<=k;i++)
			{
				string type,name;
				type=temp[i].type,name=temp[i].name;
				
				Sto[name]=++cnt;
				star[Sto[name]]=sta[type];
				start[Sto[name]]=cna+1;
				for (int j=1;j<=sta[type];j++){add[++cna]=Sto[name];}
				cna=cna-sta[type]+dui;
				size+=dui;
				NtoS[Sto[name]]=name;
			}
			cout<<size<<" "<<dui<<endl;
			Send=Sst+size;
		}
		if (op==2)
		{
			string type,name;
			cin>>type>>name;
			int r3;
			tran[name]=++cnt;
			if (sta[type]==0){S=tran[name];start[tran[name]]=Sst;cout<<Sst<<endl;}
			else
			{
				start[tran[name]]=cna+1;
				star[tran[name]]=sta[name];
				for (int i=1;i<=sta[type];i++) add[++cna]=tran[name];
				cout<<start[tran[name]]<<endl;
			}
			NtoS[tran[name]]=name;
		}
		if (op==3)
		{
			string road;
			cin>>road;
			int r1;
			string name="";
			int type=0;
			for (int i=0;i<road.size();i++) if (road[i]=='.') type=1;
			if (type==1)
			{
				for (int i=0;i<road.size();i++)
				{
					if (road[i]=='.') name="";
					else name+=road[i];
				}
				cout<<start[Sto[name]]<<endl;
			}
			else cout<<start[tran[road]]<<endl;
		}
		if (op==4)
		{
			long long x;
			scanf("%lld",&x);
			if (x>N-10){cout<<"ERR"<<endl;continue;}
			if (add[x]==0){cout<<"ERR"<<endl;continue;}
			if (Sst<=x && x<=Send){
				cout<<NtoS[S]<<"."<<NtoS[add[x]]<<endl;
			}
			else cout<<NtoS[add[x]]<<endl;
		}
	}
	
	
	return 0;
}
2023/10/22 14:42
加载中...