题解:CF2144C Non-Descending Arrays
解题思路
简单 DP 题(甚至可能不算 DP),提供一种容易理解并且好写的做法,复杂度
容易想到设
然后考虑转移,我们不妨假定前
但如果
::::info[代码]
不开 long long 见祖宗。
#include<bits/stdc++.h>
using namespace std;
const int N=1002,M=1002,mod=998244353;
#define A (a[i]>=a[i-1])
#define B (b[i]>=b[i-1])
#define C (a[i]>=b[i-1])
#define D (b[i]>=a[i-1])
int T,n,a[N],b[N];
long long f[N];
//bool c[N];
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
scanf("%d",&b[i]);
f[i]=0;//,c[i]=false;
}
f[1]=2;//,c[1]=true;
for(int i=2;i<=n;i++){
int x=0;
x=(A&&B?1:0)+(C&&D?1:0);
f[i]=(f[i-1]*x)%mod;
}
printf("%lld\n",f[n]);
}
return 0;
}
::::
没用的小优化
发现
::::info[代码]
不开 long long 见祖宗。
#include<bits/stdc++.h>
using namespace std;
const int N=1002,mod=998244353;
int T,n,a[N],b[N];
long long ans;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
ans=2;
for(int i=2;i<=n;i++)
if(a[i]>=a[i-1]&&b[i]>=b[i-1]&&a[i]>=b[i-1]&&b[i]>=a[i-1])
(ans<<=1)%=mod;
printf("%lld\n",ans);
}
return 0;
}
::::