关于 CSP-S 2023 T3
  • 板块学术版
  • 楼主吴思诚
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/10/27 21:17
  • 上次更新2023/11/2 11:10:31
查看原帖
关于 CSP-S 2023 T3
371848
吴思诚楼主2023/10/27 21:17
#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操作的答案提取出来,与此程序输出一致,请大佬帮忙看看是什么问题。

2023/10/27 21:17
加载中...