当前位置: 代码迷 >> 综合 >> codeforces 1442B. Identify the Operations
  详细解决方案

codeforces 1442B. Identify the Operations

热度:70   发布时间:2023-11-24 00:26:04.0

传送门

题意:数组a(所有数不同 )中选中ai删除,然后将或 插入到数组b末尾,问一种有多少种可能

分别计算两边的数能删除的个数设为,而每次删除一个数不会改变之后的数的大小,所以直接相乘就是结果

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;const ll mod = 998244353;
ll t;
ll n, k;
ll a[200007];
ll b[200007];
ll pos[200007];int main() {scanf("%lld", &t);while (t--) {ll ans = 1;scanf("%lld%lld", &n, &k);a[0] = a[n + 1] = INT_MAX;for (int i = 1; i <= n; i++) {ll x;scanf("%lld", &x);pos[x] = i;a[i] = 0;}for (int i = 1; i <= k; i++) {scanf("%lld", &b[i]);a[pos[b[i]]] = i;}for (int i = 1; i <= k; i++)ans = ans * ((a[pos[b[i]] - 1] < a[pos[b[i]]]) + (a[pos[b[i]] + 1] < a[pos[b[i]]])) % mod;printf("%lld\n", ans);}return 0;
}

 

  相关解决方案