社区讨论

50玄关求助

B3789[信息与未来 2023] 程序分析参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjtec7g
此快照首次捕获于
2025/11/04 08:12
4 个月前
此快照最后确认于
2025/11/04 08:12
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
char s[1111][1111]; 
int n,sta;
int sum(int x) {
	int y=0;
	stack<int> st;
	int d=0; 
	for(int i=sta;i<n;i++) {
		int z;
		if(sscanf(s[i],"if (x > %d) {",&z)==1) {
			st.push(0);
			if(!d) {
				if(x>z) continue;
				else d=st.size();
			}
//			cout<<z<<"[>"<<i<<"]"<<st.size()<<"\n";
		}
		else if(sscanf(s[i],"if (x < %d) {",&z)==1) {
			st.push(0);
			if(!d) {
				if(x<z) continue;
				else d=st.size();
			}
//			cout<<z<<"[<"<<i<<"]"<<st.size()<<"\n";
		}
		else if(sscanf(s[i],"y = %d",&z)==1&&!d) {
			y=z;
//			cout<<y<<" "<<d<<"[="<<i<<"]"<<st.size()<<"\n";
		}
		else if(s[i][0]=='}') {
			if(d==st.size()) d=0;
			st.pop();
		}
	} 
	return y;
}
int main() {
	cin>>n;
	int l=INT_MIN,r=INT_MAX;
	set<int> st;
	int id=0;
	char c=getchar();
	int m=n;
	while(m--) {
		string ss;
		getline(cin,ss);
		while(ss[0]==' ') ss.erase(0,1);
		for(int i=0;i<ss.size();i++) s[id][i]=ss[i];
		int x;
		if(sscanf(s[id],"if (x > %d)",&x)==1) {
			st.insert(x+1);
		}
		else if(sscanf(s[id],"if (x < %d)",&x)==1) {
			st.insert(x-1);
		}
		id++;
	}
	set<int> st2;
	int k=0;
	for(;s[sta][0]=='y';sta++) {
		m=sscanf(s[sta],"y = %d",&k);
	}
	st2.insert(k);
	for(set<int>::iterator it=st.begin();it!=st.end();it++) {
		st2.insert(sum(*it));
//		cout<<*it<<":\n";
	}
	for(set<int>::iterator it=st2.begin();it!=st2.end();it++) cout<<*it<<" ";
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...