各位一定要注意TVT
查看原帖
各位一定要注意TVT
778449
WPL0216楼主2025/2/8 14:29

本蒟蒻写完代码以后交了好几遍都是10分,最后发现是没模上12345678910(注意!!!

第二次改完后40分,最后发现是定义栈时没开long long。。。改完以后就AC了(代码第四行的<>中

如果思路很相近的可以注意一下,希望能帮助到各位AC

代码注释都打上我的思路了,如果有可以改进的地方还请各位大佬指出(感激感激

#include<bits/stdc++.h>
using namespace std;
long long n,a,sum,ans;//括号数量,输入括号,嵌套括号计分,答案 
stack <long long> s;//定义栈,注意要开long long 
int main(){
	cin>>n;//输入括号数量 
	while(n--){//n个括号的循环 
		cin>>a;//输入括号 
		sum=0;//将嵌套括号的计数归零 
		switch(a){//判断输入的东西 
			case 0://如果是左括号 
				s.push(a);//压入 
				break;
			case 1://如果是右括号 
				if(s.top()==0){//如果栈顶是左括号,就将其组合变为1分 
					s.pop();//弹出左括号 
					s.push(1);//将分数1压入 
				}else if(s.top()!=0){//如果栈顶是分数,说明此处有括号嵌套 
					while(s.top()!=0){//如果栈顶还不是左括号,循环 
						sum+=s.top()%12345678910;//加上内部括号的分数 
						s.pop();//弹出加完的分 
					}
					s.pop();//将剩余的左括号弹出 
					s.push((2*sum)%12345678910);//将分数压入 
				}
				break;
		}
	}
	while(s.empty()!=true){//加上栈中所有的分数(如果站还没空,循环 
		ans+=s.top()%12345678910;
		s.pop();//弹出加完的分 
	}
	cout<<ans%12345678910;//输出最终答案 
	return 0;
}

2025/2/8 14:29
加载中...