原题链接

题意简介

建议去原题看。这题意我表达不清楚。

大概就是给你一个 n 的排列,现在要求你进行 m 次操作。

每次操作,你会在现有的排列中删去一个数,然后选择其左边或右边的一个与之相邻的数加入 b 数组中。

然后将变成两截的数组重新连在一起,更新下标。

现在问有多少种操作方案,可以使 b 数组中恰好按顺序排列着它给定的那几个数字。

只要两个方案中任一轮删数的下标不同,就视为不同的方案。

思路分析

这道题显然是道水题。不明白为什么扔在 F。或许出题人是用脚编排题目。

其实这道题是同场 div1 的 B 题,之前写的 CF1443 D 则是 div1 的 A 题。

感觉E题更难一点。

由数字不会重复这一点上看,想要加入一个数字,就需要删去其中一个与之相邻的数字。

如果某个数字两端都是需要在其之后加入的数字,那么显然无解。

另外,在删数过后,后面的数字的下标会往前推一格。判断方案不同的依据就是被删除的下标的顺序。

如果某个数字原本另一边就有一个需要保留的数字,那么前面的所有操作都不可能改变这一点。

而如果数字的两边都可以删除,那么前面的操作依然不可能改变这一点。

每次操作实质上改变的有且只有下标和加入顺序都在它之后的数字的操作对应的 ti 。

在保证不会删掉还没加入 b 的需要的数字的前提下,记每个需要的数字可以删去的与之相邻的数的个数 c 。

不难发现答案应该是: \(\prod_{i=1}^m c_i\)

代码库

说起来这是我第一次在 memset 上吃瘪。

里头有一组数据 t=1e5 里头全是 n=2 m=1

然后我就 TLE 了。

这个故事告诉我们 t 比较大时 memset 不要乱用。

或者试一下 memset(p,0,(n+1)*sizeof(int)) 。

  1. #include <cstdio>
  2. #include <cstring>
  3. typedef long long ll;
  4. #define REG register
  5. #define rep(i,a,b) for(REG int i=a;i<=b;i++)
  6. const ll N=2e5+5,mod=998244353;
  7. int n,m,A[N],B[N],p[N]; ll ans; bool vis[N];
  8. int main(){
  9. REG int t; scanf("%d",&t);
  10. while(t--){
  11. scanf("%d%d",&n,&m);
  12. //memset(p,0,sizeof(p));
  13. //memset(vis,0,sizeof(vis));
  14. rep(i,1,n) p[i]=vis[i]=0;
  15. rep(i,1,n) scanf("%d",A+i),p[A[i]]=i;
  16. rep(i,1,m) scanf("%d",B+i),vis[B[i]]=1;
  17. ans=1;
  18. rep(i,1,m){
  19. REG int pos=p[B[i]],c=0;
  20. if(pos-1>=1&&!vis[A[pos-1]]) c++;
  21. if(pos+1<=n&&!vis[A[pos+1]]) c++;
  22. ans=ans*c%mod; vis[B[i]]=0;
  23. }
  24. printf("%lld\n",ans);
  25. }
  26. return 0;
  27. }

【CF1443F】Identify the Operations 题解的更多相关文章

  1. codechef Row and Column Operations 题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  2. Codeforces Round #681 (Div. 1, based on VK Cup 2019-2020 - Final) B. Identify the Operations (模拟,双向链表)

    题意:给你一组不重复的序列\(a\),每次可以选择一个数删除它左边或右边的一个数,并将选择的数append到数组\(b\)中,现在给你数组\(b\),问有多少种方案数得到\(b\). 题解:我们可以记 ...

  3. Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final)【ABCDF】

    比赛链接:https://codeforces.com/contest/1443 A. Kids Seating 题意 构造一个大小为 \(n\) 的数组使得任意两个数既不互质也不相互整除,要求所有数 ...

  4. Leetcode-283 Move Zeroes

    #283.   Move Zeroes Given an array nums, write a function to move all 0's to the end of it while mai ...

  5. Cheatsheet: 2013 10.09 ~ 10.23

    Other 10 Basic Linux Networking and Monitoring Commands You Should Know A simple, portable yet effic ...

  6. 6.4 操作契约 Operation Contracts

    4.操作契约 Operation Contracts  “用例描述”的补充  强调: 用例中重要的动作,其开始与结束是需要一些约束 4.5 操作契约的后置条件  定义Definition  后 ...

  7. Oracle ASM 相关的 视图(V$) 和 数据字典(X$)

    本文转自: http://blog.csdn.net/tianlesoftware/article/details/6733039 ASM由于其高度的封装性,使得我们很难知道窥探其内部的原理.可以通过 ...

  8. Snoop resynchronization mechanism to preserve read ordering

    A processor employing a post-cache (LS2) buffer. Loads are stored into the LS2buffer after probing t ...

  9. UML期末绘图及细节总结

    往届期末绘图的题目例如以下所看到的: Read the providing materials carefully, and then do tasks. 2.1: Use Case Diagram ...

随机推荐

  1. heap是堆,stack是栈

    1.栈是用来存放基本类型的变量和引用类型的变量,堆用来存放new出来的对象和数组. 2.栈的存取速度快,但不灵活.堆的存取速度慢,但是存取灵活,空间动态分配. 3.栈在建立在连续的物理位置上,而堆只需 ...

  2. 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型

    010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...

  3. sublime text3配置Python2、Python3的编译环境

    由于Python2.Python3使用量都很高,Python3虽然是未来趋势,但是目前个别库还是只支持Python2.所以,很多人会选择在电脑上安装两个版本的Python,那么使用sublime执行代 ...

  4. TCP/IP 寻址

    原文:TCP/IP 寻址 第一节:TCP/IP 简介 第二节:TCP/IP 寻址 第三节:TCP/IP 协议 第四节:TCP/IP 邮件 TCP/IP 使用 32 个比特(bit)或者 4 个 0 到 ...

  5. 硬盘安装Linux

    准备材料:U盘.Linux镜像.UltraISO 1.下载安装UltraISO, 2.打开系统镜像 打开后我们就可以在左边侧栏看到镜像的内容 3.插入U盘,点击:启动->写入光盘映像->选 ...

  6. vscode编写python,引用本地py文件出现红色波浪线

    前言 引用本地py文件出现红色波浪线,如下图: 原因 经过查询得知,vscode中的python插件默认使用的是pylint来做代码检查,因此需要对pylint做一些配置 解决方案 在setting. ...

  7. 多测师讲解_007 hashlib练习

    #Hash,译做"散列",也有直接音译为"哈希"的.把任意长度的输入,通过某种hash算法,变换成固定长度的输出,该输出就是散列值,也称摘要值.该算法就是哈希函 ...

  8. 本地环境Django配置问题

    Django本地环境出现的问题 当你的前端出现这个问题的时候 你只需要吧setting.py 中的DEBUG 改为 True,即可 我原来是是DEBUG = False 本人亲测有用!!!

  9. github 如何解决error: failed to push some refs

    错误 error: failed to push some refs to 'https://github.com/whitclass/scrapy-spider.git' hint: Updates ...

  10. 【应用服务 App Service】当使用EntityFrameWorkCore访问Sql Server数据库时,在Azure App Service会出现Cannot create a DbSet for ** because this type is not included in the model for the context的错误

    问题情形 使用EF Core访问数据库,在本地运行正常,发布到App Service后,偶尔出现了Cannot create a DbSet for ** because this type is n ...