整体思路是正确的 最后求有多少种切法的时候思路错了 我想的是可以选择切1🔪 、两🔪、三🔪、四🔪…(n-1)🔪 就卡到这里不会计算了
正确的思路是 每个可以分割的地方 可以选择切或者不切 一共有n处 所以答案为 2的n次方 用快速幂求解就可以了
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
stack<char>s;
const int mod=1e9+7;
long long a[20],b[10100],c[101001];
long long qpow(int x,int y)
{
long long res=1;
while(y)
{
if(y&1)
res=1ll*res*x%mod;
x=1ll*x*x%mod;
y=y>>1;
}
return res;
}
int main()
{
string a;
getline(cin,a);
int sum=-1;
for(int i=0; i<a.size(); i++)
{
if(a[i]=='(')
s.push(a[i]);
if(a[i]==')')
{
if(s.size()==0)
{
printf("-1\n");
return 0;
}
s.pop();
if(s.size()==0)
sum++;
}
}
if(s.size()!=0)
printf("-1\n");
else
printf("%lld\n",qpow(2,sum));
return 0;
}