Submission #1211087

#TimeUsernameProblemLanguageResultExecution timeMemory
1211087yangbaichDstorv (FXCUP3_dstorv)C++20
100 / 100
397 ms392220 KiB
#include<bits/stdc++.h>
using namespace std;
const int N=5005;
const int mod=1e9+7;
char s[N];
long long f[N][N];
long long g[N][N];
inline long long qmod(long long a,long long b)
{
	long long ans=1;
	while(b)
	{
		if(b&1) ans=ans*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return ans;
}
int main()
{
	int n,r,h;
	cin>>n>>r>>h;
	scanf("%s",s+1);
	int a,b;
	cin>>a>>b;
	long long w1=1LL*r*qmod(r+h,mod-2)%mod;
	long long w2=(1LL-w1+mod)%mod;
//	cout<<w1<<" "<<w2<<"\n";
	f[0][b]=1;
	for(int i=1;i<=n;i++)
	{
		if(s[i]=='R')
		{
			for(int j=1;j<=n;j++)
			{
				f[i][j]=(f[i-1][j]*w1%mod+f[i][j-1]*w2%mod)%mod;		
			}
		}
		else
		{
			for(int j=0;j<n;j++)
			{
				f[i][j]=f[i-1][j+1];
			}
		}
	}
	g[n+1][a]=1;
	for(int i=n;i>=1;i--)
	{
		if(s[i]=='H')
		{
			for(int j=1;j<=n;j++)
			{
				g[i][j]=(g[i+1][j]*w2%mod+g[i][j-1]*w1%mod)%mod;		
			}
		}
		else
		{
			for(int j=0;j<n;j++)
			{
				g[i][j]=g[i+1][j+1];
			}
		}
	}
	long long ans=0;
	for(int i=0;i<=n;i++)
	{
//		cout<<f[i][0]<<" "<<g[i+1][0]<<"\n";
		ans=(ans+f[i][0]*g[i+1][0]%mod)%mod;
	}
	cout<<ans;
}

Compilation message (stderr)

dstorv.cpp: In function 'int main()':
dstorv.cpp:23:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |         scanf("%s",s+1);
      |         ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...