C. LR-remainders
题解
如果一开始就把所有数乘起来,结果会太大,所以我们把逆着来,先找到最后一个元素,然后乘法求模
code
#include<bits/stdc++.h>
using namespace std;
long long a[200005]={0},ans[200005]={0};
int main()
{
int t;
cin>>t;
while(t--)
{
long long n,m,sum=1;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
char s[n+5];
scanf("%s",s+1);
long l=1,r=n;
for(int i=1;i<n;i++)
{
if(s[i]=='L')l++;
else r--;
}
sum=a[l];
ans[n]=sum%m;
for(int i=n-1;i>=1;i--)
{
if(s[i]=='L')
{
l--;
sum=sum*a[l]%m;
}
else
{
r++;
sum=sum*a[r]%m;
}
ans[i]=sum;
}
for(int i=1;i<=n;i++)cout<<ans[i]<<" ";
puts("");
}
return 0;
}

浙公网安备 33010602011771号