萌新疑问(关于字符串输入)
查看原帖
萌新疑问(关于字符串输入)
732426
zhanghy123楼主2024/10/4 21:10

rt,本题使用 string 直接输入括号串只有 22 分,但使用 char 依次输入每个字符即可 AC。

使用 string:两分

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=3e5+4,mod=1e9+9;
ll n,dp[3][N];
string s;
int main()
{
	cin>>n;
	scanf("%s",&s[1]);//从地址 1 开始输入,方便后续操作
	dp[0][0]=1;
	for(ll i=1; i<=n; i++)
		for(ll j=0; j<=min(i,n-i); j++){
			if(s[i]==')' || !j)
				dp[i&1][j]=dp[(i+1)&1][j+1];
			else
				dp[i&1][j]=(dp[(i+1)&1][j+1]+dp[(i+1)&1][j-1])%mod;
			dp[i&1][j]%=mod;
		}
	cout<<dp[n&1][0];	
	return 0;
}

使用 char:AC

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=3e5+4,mod=1e9+9;
ll n,dp[3][N];
char c;
int main()
{
	cin>>n;
	dp[0][0]=1;
	for(ll i=1; i<=n; i++){
		cin>>c;//直接输入括号串的每个字符
		for(ll j=0; j<=min(i,n-i); j++){
			if(c==')' || !j)
				dp[i&1][j]=dp[(i+1)&1][j+1];
			else
				dp[i&1][j]=(dp[(i+1)&1][j+1]+dp[(i+1)&1][j-1])%mod;
			dp[i&1][j]%=mod;
		}
	}
	cout<<dp[n&1][0];	
	return 0;
}

2024/10/4 21:10
加载中...