题目链接
题意:
N个卡片,上面的数字为1~k,然后有k个限制条件,每个限制条件有1个字母(ci)和一个数字(ki),如果ci是‘L’ 表示i能够输入的最左边的位置是ki,如果ci是‘R’ 表示i能够输入的最右边的位置是ki。如果能理解题意,这个题就很简单了,因为ki位置上的数字都确定了,其他位置上的按照这个条件分别加上就可以了。
下面是AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define ll long long
const ll K=1010;
ll a[K],f[K];
bool st[K];
const ll N=998244353;
int main()
{
ll n,k,x;
char c;
cin>>n>>k;
memset(a,0,sizeof(a));
memset(f,0,sizeof(f));
memset(st,false,sizeof(st));
for(ll i=1;i<=k;i++)
{
cin>>c>>x;
if(c=='L')
{
for(ll j=x;j<=n;j++) f[j]++;
}
else
{
for(ll j=1;j<=x;j++) f[j]++;
}
st[x]=true;
}
ll sum=1;
for(ll i=1;i<=n;i++)
{
if(!st[i]) sum=(sum*f[i])%N;
}
cout<<sum<<endl;
}
注:记得开long long