CSP-S T3 95pts 求调
  • 板块学术版
  • 楼主heaksicn杠J歪
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/10/24 15:34
  • 上次更新2023/11/2 11:35:51
查看原帖
CSP-S T3 95pts 求调
343251
heaksicn杠J歪楼主2023/10/24 15:34

luogu 民间数据 wa 最后一个点。

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
    int X=0,w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    return w?-X:X;
}
inline void write(int x){
	if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
struct structt{
	int k;
	int s[101],a[101],o[101];
	string tp[101],nm[101];
	int maxn,siz;
	string id;
}f[101];
struct node{
	int s,a,b;
	string tp,nm;
}g[101];
map<string,int> mp1,mp2;
map<string,int> mp;
signed main(){
	freopen("struct3.in","r",stdin);
	freopen("struct.out","w",stdout);
	mp1["byte"]=1,mp1["short"]=2,mp1["int"]=4,mp1["long"]=8;
	mp2["byte"]=1,mp2["short"]=2,mp2["int"]=4,mp2["long"]=8;
	int q=read();
	int cnt=0,tot=0;
	while(q--){
		int op=read();
		if(op==1){
			cnt++;
			cin>>f[cnt].id;
			f[cnt].k=read();
			for(int i=1;i<=f[cnt].k;i++){
				cin>>f[cnt].tp[i]>>f[cnt].nm[i];
				int lst=f[cnt].o[i-1]+f[cnt].s[i-1];
				f[cnt].a[i]=mp2[f[cnt].tp[i]];
				f[cnt].s[i]=mp1[f[cnt].tp[i]];
				if(lst%f[cnt].a[i]) lst+=(f[cnt].a[i]-lst%f[cnt].a[i]);
				f[cnt].o[i]=lst;
				f[cnt].maxn=max(f[cnt].maxn,f[cnt].a[i]);
			}
			int lst=f[cnt].o[f[cnt].k]+f[cnt].s[f[cnt].k];
			if(lst%f[cnt].maxn) lst+=(f[cnt].maxn-lst%f[cnt].maxn);
			f[cnt].siz=lst;
			mp1[f[cnt].id]=f[cnt].siz;
			mp2[f[cnt].id]=f[cnt].maxn;
			mp[f[cnt].id]=cnt;
			cout<<f[cnt].siz<<" "<<f[cnt].maxn<<endl;
		}else if(op==2){
			tot++;
			cin>>g[tot].tp>>g[tot].nm;
			g[tot].a=mp2[g[tot].tp];
			g[tot].s=mp1[g[tot].tp];
			int lst=g[tot-1].b+g[tot-1].s;
			if(lst%g[tot].a) lst+=(g[tot].a-lst%g[tot].a);
			g[tot].b=lst;
			cout<<g[tot].b<<endl;
		}else if(op==3){
			string s;
			cin>>s;
			s+=".";
			string now="";
			int len=s.size(),tp;
			for(int i=0;i<len;i++){
				if(s[i]=='.'){
					tp=i+1;
					break;
				}
				now+=s[i];
			}
			int ans=0,nwid;
			for(int i=1;i<=tot;i++){
				if(g[i].nm==now){
					ans=g[i].b;
					nwid=mp[g[i].tp];
					break;
				}
			}
			if(nwid==0){
				write(ans);
				puts("");
				continue;
			}
			now="";
			for(int i=tp;i<len;i++){
				if(s[i]=='.'){
					for(int j=1;j<=f[nwid].k;j++){
						if(f[nwid].nm[j]==now){
//							cout<<f[nwid].nm[j]<<endl;
							ans+=f[nwid].o[j];
							nwid=mp[f[nwid].tp[j]];
							break;
						}
					}
//					cout<<nwid<<endl;
					if(nwid==0){
						break;
					}
					now="";
					continue;
				}
				now+=s[i];
			}
			write(ans);
			puts("");
		}else{
			int now=read();
			string ans="",ty;
			int nwid=-1;
			for(int i=1;i<=tot;i++){
				if(g[i].b+g[i].s>now&&g[i].b<=now){
					nwid=mp[g[i].tp];
					now-=g[i].b;
					ans+=g[i].nm;
					ty=g[i].tp;
					break;
				}
			}
			if(nwid==-1){
				puts("ERR");
				continue;
			}
			if(!nwid){
				if(mp1[ty]>now)cout<<ans<<endl;
				else puts("ERR");
				continue;
			}
			ans+=".";
			while(now){
				if(now<0){
					puts("ERR");
					break;
				}
//				cout<<ans<<" "<<now<<endl;
				int fl=0;
				for(int i=1;i<=f[nwid].k;i++){
//					cout<<f[nwid].o[i]<<" "<<f[nwid].s[i]<<endl;
					if(f[nwid].o[i]+f[nwid].s[i]>now&&f[nwid].o[i]<=now){
//						cout<<"--\n";
						now-=f[nwid].o[i];
						ans+=f[nwid].nm[i];
						ty=f[nwid].tp[i];
						nwid=mp[f[nwid].tp[i]];
						fl=1;
						break;
					}
				}
				if(!fl){
					puts("ERR");
					break;
				}
				if(!nwid){
//					cout<<ty<<" "<<now<<endl;
					if(mp1[ty]>now) cout<<ans<<endl;
					else puts("ERR");
					break;
				}
				ans+=".";
			}
		}
	}
	return 0;
}

2023/10/24 15:34
加载中...