本蒟蒻写完代码以后交了好几遍都是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;
}