P2830求捞(玄关
  • 板块灌水区
  • 楼主PDAST
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/11 17:04
  • 上次更新2024/3/11 19:29:17
查看原帖
P2830求捞(玄关
982629
PDAST楼主2024/3/11 17:04

67pts求调

code:

#include<bits/stdc++.h>
using namespace std;
map<string,vector<int>>arr;
int output(string name,int i){
	if(name[i]>='a'&&name[i]<='z'||name[i]>='A'&&name[i]<='Z'){
		string st;
		int k=0;
		while(name[i]>='a'&&name[i]<='z'||name[i]>='A'&&name[i]<='Z'){
//			cout<<i<<endl;
			st+=name[i];
			i++;
		}
		int pos=output(name,i+1);
//		cout<<pos<<endl;
//		cout<<st<<" "<<pos<<endl;
		if(pos+1>=arr[st][0]){
			cout<<-1;
			exit(0);
		}
		return arr[st][pos+1];
	}else{
		int num=0;
		while(name[i]>='0'&&name[i]<='9'){
			num=num*10+name[i]-'0';
			i++;
		}
		if(num<0){
			cout<<-1;
			exit(0);
		}
		return num;
	}
}
int main() {
	string type,doing;
	while(cin>>type>>doing) {
		if(type=="int") {
			int i=0,num=0;
			string name;
			while(doing[i]>='A'&&doing[i]<='Z'||doing[i]>='a'&&doing[i]<='z') {
				name+=doing[i++];
			}
			while(doing[++i]!=']') {
				num=num*10+doing[i]-'0';
			}
			arr[name].push_back(num);
		} else if(type=="cout") {
			string name;
			int i=0;
			while(doing[i]!='['){
				name+=doing[i++];
//				cout<<name<<" "<<i<<endl;
			}
//			cout<<name<<endl;
			int a=output(doing,i+1)+1;
			if(a>=arr[name][0]+1){
				cout<<-1;
				return 0;	
			}
			cout<<arr[name][a]<<endl;
		} else {
			string name;
			int i=-1,num=0;
			int n=doing.size();
			while(++i<n){
				num=num*10+doing[i]-'0';
			}
			i=-1;
			while(type[++i]!='['){
				name+=type[i];
			}
			int pos=output(type,i+1)+1;
			if(pos>=arr[name][0]+1){
				cout<<-1;
				return 0;
			}
			arr[name][pos]=num;
		}
	}
}
2024/3/11 17:04
加载中...