RE40pts,马蜂良好注释完整玄关求调
查看原帖
RE40pts,马蜂良好注释完整玄关求调
1283988
leozhao123楼主2024/7/30 16:51

#5以后全RE。
记录

#include<bits/stdc++.h>
using namespace std;
long long n,m,l,last,table,_head,cnt,x[12],y[12];
string tmp,data[12][12][12],real_[100],xx,columns,table_name,header;
map<string,int>name,head[12];// 将表名/表头映射成数字 
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n;
	// 1.输入表 
	for(int i=1;i<=n;++i) {
		cin>>tmp>>x[i]>>y[i];
		name[tmp]=i;// 表示第tmp张表是第i张 
		for(int j=1;j<=y[i];++j) {
			cin>>tmp;
			head[i][tmp]=j;// 表示第i张表中名为tmp的表头是第j个表头 
		}
		for(int j=1;j<x[i];++j)
			for(int k=1;k<=y[i];++k)
				cin>>data[i][j][k];// 表示第i张表中第k个表头下第j个数据  
	}
	cin>>m;
	for(int i=1;i<=m;++i) {
	// 2.输入语句 
		columns=table_name=header="";
		cin>>tmp>>columns;
		cin>>tmp>>table_name;
		cin>>tmp>>header;
	// 3.将 = 两边分开 
		l=header.length();
		for(int j=0;j<l;++j) {
			if(header[j]=='=') {
				xx=header.substr(j+1,l);// xx是此轮查找的关键字 
				header=header.substr(0,j);
				break;
			}
		}
	// 4.处理逗号隔开的表头 
		l=columns.length();
		last=0,cnt=0;
		for(int j=0;j<l;++j) {
			if(columns[j]==',') {
				real_[cnt++]=columns.substr(last,j);// cnt记录输出表头数, real记录cnt个表头 
				last=j+1;// 截取的子串的起点 
			}
		}
		real_[cnt++]=columns.substr(last,l);// 最后一个 
	// 5.输出 
		table=name[table_name];
		_head=head[table][header];
		for(int j=1;j<=x[table];++j)
			if(data[table][j][_head]==xx) {
				for(int k=0;k<cnt;++k) cout<<data[table][j][head[table][real_[k]]]<<' ';
				// 第table张表中第head[table][real_[k]]个表头下第j个数据
				cout<<endl;
			}
	}
	return 0;
}
2024/7/30 16:51
加载中...