当前位置:网站首页>2022 Hangzhou Electric Power Multi-School Session 3 Question L Two Permutations
2022 Hangzhou Electric Power Multi-School Session 3 Question L Two Permutations
2022-08-05 00:22:00 【Rain Sure】
题目链接
题目大意
给定两个长度为 n n n的排列 a , b a,b a,band a length consisting of two permutations 2 ∗ n 2*n 2∗n的数组 c c c,Take a number from the leftmost end of either of the two permutations and place it at a time c [ i ] c[i] c[i]里,Please construct c c c数组的方案数.
题解
I thought about linearity during the gameDP的做法,感觉很牛逼.后来看题解,Found that everyone is doing better...尤其是jianglysimulation Dafa,让我大受震撼!!!
设 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k] 表示第 i i i个数从 j j jArray selected, i − 1 i - 1 i−1个数从 k k kArray selected,An additional array is also required g g gRecord which array was selected.具体转移看代码~ ( 0 < = j < = 1 ) ( 0 < = k < = 1 ) (0 <= j <= 1) (0 <= k <= 1) (0<=j<=1)(0<=k<=1)
代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);
#define x first
#define y second
#define endl '\n'
const int inf = 1e9 + 10;
const int maxn = 300010, M = 2000010;
const int mod = 998244353;
typedef pair<int,int> PII;
typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;
int h[maxn], e[M], w[M], ne[M], idx;
int dx[4] = {
-1, 0, 1, 0}, dy[4] = {
0, -1, 0, 1};
int cnt;
void add(int a, int b, int c)
{
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++;
}
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
int n;
int a[maxn], b[maxn], c[maxn * 2];
int f[maxn * 2][2][2];
int g[maxn * 2][2][2];
int main()
{
int t; 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]);
for(int i = 1; i <= n * 2; i ++) scanf("%d", &c[i]);
memset(f, 0, sizeof f); memset(g, 0, sizeof g);
if(c[1] == a[1] && c[2] == a[2]) {
f[2][0][0] = 1;
g[2][0][0] = 2;
}
if(c[1] == a[1] && c[2] == b[1]){
f[2][1][0] = 1;
g[2][1][0] = 1;
}
if(c[1] == b[1] && c[2] == a[1]){
f[2][0][1] = 1;
g[2][0][1] = 1;
}
if(c[1] == b[1] && c[2] == b[2]){
f[2][1][1] = 1;
g[2][1][1] = 0;
}
for(int i = 3; i <= n * 2; i ++){
// f[i][0][0]
int id0 = g[i - 1][0][0], id1 = g[i - 1][0][1];
// cout << id0 << ' ' << id1 << endl;
if(a[id0 + 1] == c[i]) f[i][0][0] = (f[i][0][0] + f[i - 1][0][0]) % mod, g[i][0][0] = id0 + 1;
if(a[id1 + 1] == c[i]) f[i][0][0] = (f[i][0][0] + f[i - 1][0][1]) % mod, g[i][0][0] = id1 + 1;
// f[i][0][1]
id0 = g[i - 1][1][0], id1 = g[i - 1][1][1];
if(a[id0 + 1] == c[i]) f[i][0][1] = (f[i][0][1] + f[i - 1][1][0]) % mod, g[i][0][1] = id0 + 1;
if(a[id1 + 1] == c[i]) f[i][0][1] = (f[i][0][1] + f[i - 1][1][1]) % mod, g[i][0][1] = id1 + 1;
// f[i][1][0]
id0 = g[i - 1][0][0], id1 = g[i - 1][0][1];
if(b[(i - id0)] == c[i]) f[i][1][0] = (f[i][1][0] + f[i - 1][0][0]) % mod, g[i][1][0] = id0;
if(b[i - id1] == c[i]) f[i][1][0] = (f[i][1][0] + f[i - 1][0][1]) % mod, g[i][1][0] = id1;
// f[i][1][1]
id0 = g[i - 1][1][0], id1 = g[i - 1][1][1];
if(b[i - id0] == c[i]) f[i][1][1] = (f[i][1][1] + f[i - 1][1][0]) % mod, g[i][1][1] = id0;
if(b[i - id1] == c[i]) f[i][1][1] = (f[i][1][1] + f[i - 1][1][1]) % mod, g[i][1][1] = id1;
}
int res = 0;
for(int i = 0; i < 2; i ++){
for(int j = 0; j < 2; j ++){
res = (res + f[n * 2][i][j]) % mod;
}
}
printf("%d\n", res);
}
return 0;
}
边栏推荐
- 2022杭电多校第三场 K题 Taxi
- About I double-checked and reviewed the About staff page, returning an industry question
- [Cloud Native--Kubernetes] Pod Controller
- 软件测试面试题:什么是软件测试?软件测试的目的与原则?
- SQL association table update
- MAUI Blazor 权限经验分享 (定位,使用相机)
- 导入JankStats检测卡帧库遇到问题记录
- GO中sync包自由控制并发的方法
- 2022杭电多校第一场 1004 Ball
- 软件测试面试题:做好测试计划的关键是什么?
猜你喜欢
性能测试如何准备测试数据
《MySQL入门很轻松》第2章:MySQL管理工具介绍
Handwritten Distributed Configuration Center (1)
【LeetCode】双指针题解汇总
STC89C52RC的P4口的应用问题
could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
图解 Canvas 入门
Statistical words (DAY 101) Huazhong University of Science and Technology postgraduate examination questions
2022杭电多校第三场 K题 Taxi
QSunSync Qiniu cloud file synchronization tool, batch upload
随机推荐
2022杭电多校训练第三场 1009 Package Delivery
leetcode:269. 火星词典
tiup update
2022杭电多校第三场 K题 Taxi
日志(logging模块)
元宇宙:未来我们的每一个日常行为是否都能成为赚钱工具?
克服项目管理中恐惧心理
软件测试面试题:做好测试计划的关键是什么?
2022杭电多校第三场 L题 Two Permutations
KT148A voice chip ic working principle and internal architecture description of the chip
SQL association table update
Flask框架 根据源码分析可扩展点
软件开发工具的技术要素
软件测试面试题:软件测试类型都有哪些?
进程间通信和线程间通信
"No title"
典型相关分析CCA计算过程
[230]连接Redis后执行命令错误 MISCONF Redis is configured to save RDB snapshots
电子行业MES管理系统的主要功能与用途
2022牛客多校第三场 J题 Journey