Spoon Taking Problem(c++题解)

题目描述

�N 人が円卓に座っており,各人は反時計回りに順に 1, …, �1, …, N と番号付けられています.各人はそれぞれ左右どちらか一方の利き手を持っています.

円卓上には 1, …, �1, …, N と番号付けられた計 �N 本のスプーンが,隣り合う二人の間に 11 本ずつ置いてあります.各 1 ≤ � ≤ �1 ≤ i ≤ N について,人 �i の左側,右側にはそれぞれスプーン �i,スプーン (�+1)(i+1) があります.ここで,スプーン (�+1)(N+1) はスプーン 11 のことを指します.

� = 4N = 4 での模式図を以下に示します.

(1, …, �)(1, …, N) の順列 (�1, …, ��)(P1​, …, PN​) が与えられます.�=1,…,�i=1,…,N の順に,人 ��Pi​ が以下のように行動します.

  • 自分の右側または左側にスプーンが残っているならば,そのうち 11 つを取る.
    • このとき自分の両側にスプーンが残っているならば,自分の利き手の側のスプーンを取る.
  • そうでないならば何もしない.

LR? からなる長さ �N の文字列 �S が与えられます.�N 人の利き手の組み合わせは 2�2N 通りありますが,そのうち以下の条件を全て満たすような組み合わせの数を 998244353998244353 で割った余りを求めてください.

  • �S の �i 番目の文字が L ならば,人 �i は左利きである.
  • �S の �i 番目の文字が R ならば,人 �i は右利きである.
  • 全員の行動が終了したとき,全員がスプーンを取っている.

输入格式

入力は以下の形式で標準入力から与えられる.

�N �1P1​ …… ��PN​ �S

输出格式

答えを 11 行に出力せよ.

题意翻译

问题陈述

有 �N 人围坐在一张圆桌旁,按逆时针顺序编号为 11 至 �N 。每个人都有一只优势手:左手或右手。

圆桌上有 �N 个勺子,编号从 11 到 �N ,每对相邻的人中间放一个勺子。在每个 1≤�≤�1≤i≤N 人 �i 的左边和右边,分别有勺子 �i 和 (�+1)(i+1) 。这里,勺子 (�+1)(N+1) 指的是勺子 11 。

下图是 �=4N=4 的示意图。

给定一个 (1,…,�)(1,…,N) 的排列组合 (�1,…,��)(P1​,…,PN​) ,这 �n 个人按照此排列的顺序行动。第 ��Pi​ 个人的行为如下:

  • 如果左侧或右侧有剩余的勺子,他们将拿走其中一个。
    • 如果两边都有剩余的勺子,他们会拿自己惯用手一边的勺子。
  • 否则,他们什么也不会做。

我们还给出了一个长度为 �N 的字符串 �S ,由 LR 和 ? 组成。在 2�2N 种可能的惯用手组合中,求有多少种满足以下所有条件,模数为 998244353998244353 :

  • 如果 �S 的 �i 个字符是 "L",那么 �i 是左撇子。
  • 如果 �S 的第 �i 个字符是 "R",那么 �i 就是右撇子。
  • 当所有人都行动完后,每个人都拿了一个勺子。

输入输出样例

输入 #1复制

3
1 2 3
L??

输出 #1复制

2

输入 #2复制

3
1 3 2
R?L

输出 #2复制

0

输入 #3复制

12
6 2 9 3 1 4 11 5 12 10 7 8
????????????

输出 #3复制

160

说明/提示

制約

  • 入力される数値は全て整数
  • 2 ≤ � ≤ 2 × 1052 ≤ N ≤ 2 × 105
  • (�1, …, ��)(P1​, …, PN​) は (1, …, �)(1, …, N) の順列
  • �S は LR? からなる長さ �N の文字列

Sample Explanation 1

人 1,2,31,2,3 がそれぞれ左利き,左利き,右利きのとき,以下のように行動が行われます. - 人 11 が行動を開始する.人 11 の両側にスプーンが残っているので,人 11 の利き手と同じ左側のスプーン 11 を取る. - 人 22 が行動を開始する.人 22 の両側にスプーンが残っているので,人 22 の利き手と同じ左側のスプーン 22 を取る. - 人 33 が行動を開始する.人 33 の右側にはスプーンが残っておらず,左側にはスプーン 33 が残っているので,スプーン 33 を取る.全員の行動が終了し,このとき全員がスプーンを取っている. この利き手の組み合わせは条件を満たします.他には人 1,2,31,2,3 がそれぞれ左利き,左利き,左利きの場合も条件を満たします.

Sample Explanation 2

条件を満たす利き手の組み合わせが存在しません.

_____________________________________________________________________________

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

_____________________________________________________________________________

唉...一份超时代码:

#include <bits/stdc++.h>
using namespace std;
long long n,ans;
int a[200005];
int b[200005];//0为左1为右-1为未知 
bool c[200005];//标记 
string s;
bool check(){memset(c,0,sizeof(c));for(int i=1;i<=n;i++){int x=a[i];if(x!=n){if(c[x]&&c[x+1])return false;else if(!c[x]&&!c[x+1])c[x+b[x]]=true;else if(!c[x])c[x]=true;else if(!c[x+1])c[x+1]=true;}else{if(c[x]&&c[1])return false;else if(!c[x]&&!c[1]){if(b[x]==0)c[x]=true;else c[1]=true;}else if(!c[x])c[x]=true;else if(!c[1])c[1]=true;}}return true;
} 
void f(int x){if(x==n+1){if(check())ans=ans%998244353+1;return;}if(b[x]==-1){b[x]=1;f(x+1);b[x]=0;f(x+1);b[x]=-1;}else f(x+1);
}
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];cin>>s;int len=s.size();for(int i=0;i<len;i++){if(s[i]=='L')b[i+1]=0;if(s[i]=='R')b[i+1]=1;if(s[i]=='?')b[i+1]=-1;}f(1);cout<<ans;
}	

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/297841.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang Gin框架

1、这篇文章我们简要讨论一些Gin框架 主要是给大家一个基本概念 1、Gin主要是分为路由和中间件部分。 Gin底层使用的是net/http的逻辑&#xff0c;net/http主要是说&#xff0c;当来一个网络请求时&#xff0c;go func开启另一个协程去处理后续(类似epoll)。 然后主协程持续…

Vue 样式技巧总结与整理[中级局]

SFC&#xff08;单文件组件&#xff09;由 3 个不同的实体组成&#xff1a;模板、脚本和样式。三者都很重要&#xff0c;但后者往往被忽视&#xff0c;即使它可能变得复杂&#xff0c;且经常导致挫折和 bug。 更好的理解可以改善代码审查并减少调试时间。 这里有 7 个奇技淫巧…

VB 通过COM接口解析PSD文件

最近有PS测评的需求&#xff0c;故而想到了解析psd文件&#xff0c;目的就是为了获取文档信息和图层信息&#xff1b;获取PS的图像信息有很多方式&#xff0c;有过程性的&#xff0c;比如监听PS的各种操作事件&#xff1b;有结果性的&#xff0c;比如本文写的解析PSD文件。 0.…

【算法练习】28:选择排序学习笔记

一、选择排序的算法思想 弄懂选择排序算法&#xff0c;先得知道两个概念&#xff1a;未排序序列&#xff0c;已排序序列。 原理&#xff1a;以升序为例&#xff0c;选择排序算法的思想是&#xff0c;先将整个序列当做未排序的序列&#xff0c;以序列的第一个元素开始。然后从左…

libusb Qt使用记录

1.libusb 下载 &#xff0c;选择编译好的二进制文件&#xff0c;libusb-1.0.26-binaries.7z libusb Activity 2. 解压 3. 在 Qt Widgets Application 或者 Qt Console Application 工程中导入库&#xff0c;Qt 使用的是 minggw 64编译器&#xff0c;所以选择libusb-MinGW-x64。…

Kubernetes(k8s):精通 Pod 操作的关键命令

Kubernetes&#xff08;k8s&#xff09;&#xff1a;精通 Pod 操作的关键命令 1、查看 Pod 列表2、 查看 Pod 的详细信息3、创建 Pod4、删除 Pod5、获取 Pod 日志6、进入 Pod 执行命令7、暂停和启动 Pod8、改变 Pod 副本数量9、查看当前部署中使用的镜像版本10、滚动更新 Pod11…

保研线性代数复习3

一.基底&#xff08;Basis&#xff09; 1.什么是生成集&#xff08;Generating Set&#xff09;&#xff1f;什么是张成空间&#xff08;Span&#xff09;&#xff1f; 存在向量空间V(V&#xff0c;&#xff0c;*)&#xff0c;和向量集&#xff08;xi是所说的列向量&#xff…

集合/容器

集合概念 当我们保存一组一样(类型相同)的元素时候&#xff0c;我们应该使用一个容器来存储&#xff0c;就可以采用数组&#xff0c;但是数组存在以下缺点&#xff1a; 1、长度开始时必须指定&#xff0c;一旦指定就不能更改。 2、使用数组进行增加元素的步骤比较麻烦 这时候…

深入PostgreSQL中的pg_global表空间

pg_global表空间的位置 在PG当中&#xff0c;一个实例(cluster)初始化完以后&#xff0c;你会看到有下边两个与表空间相关的目录生成&#xff1a; $PGDATA/base $PGDATA/global 我们再用元命令\db以及相关视图看看相应的表空间信息&#xff1a; postgres# \db …

Golang | Leetcode Golang题解之第10题正则表达式匹配

题目&#xff1a; 题解&#xff1a; func isMatch(s string, p string) bool {m, n : len(s), len(p)matches : func(i, j int) bool {if i 0 {return false}if p[j-1] . {return true}return s[i-1] p[j-1]}f : make([][]bool, m 1)for i : 0; i < len(f); i {f[i] m…

重构智能防丢产品,苹果Find My技术引领市场发展

目前市场上最主要的防丢技术是蓝牙防丢和GPS防丢&#xff0c;蓝牙防丢是通过感应防丢器与绑定手机的距离来实现防丢的。一般防丢会默认设置一个最远安全距离&#xff0c;超过这个安全距离后&#xff0c;与手机蓝牙信号断开&#xff0c;触发防丢报警&#xff0c;用户根据防丢报警…

JS详解-手写Promise!!!

前言&#xff1a; 针对js的深入理解&#xff0c;作者学习并撰写以下文章&#xff0c;由于理解认知有限难免存在偏差&#xff0c;请大家指正&#xff01;所有定义来自mdn。 Promise介绍&#xff1a; 对象表示异步操作最终的完成&#xff08;或失败&#xff09;以及其结果值. 描…

设计模式 --5观察者模式

观察者模式 观察者模式的优缺点 优点 当一个对象改变的时候 需要同时改变其他对象的相关动作的时候 &#xff0c;而且它不知道有多少具体的对象需要改变 应该考虑使用观察者模式 。观察者模式的工作就是解除耦合 让耦合双方都依赖与抽象 而不是具体 是的各自改变都不会影响另…

Leetcode_2两数相加

文章目录 前言一、两数相加1.1 问题描述1.2 解法一&#xff1a;分别将链表转为数字&#xff0c;然后相加1.3 代码实现1.4 解法二&#xff1a;分别将对应位置数字相加1.5 代码实现 二、使用步骤1.引入库2.读入数据 前言 链表是一种物理内存非连续存储&#xff0c;非顺序的线性数…

golang 和java对比的优劣势

Golang&#xff08;或称Go&#xff09;和Java都是非常流行的编程语言&#xff0c;被广泛应用于各种领域的软件开发。尽管它们都是高级编程语言&#xff0c;但它们具有许多不同的特性和适用场景。本文将重点比较Golang和Java&#xff0c;探讨它们的优势和劣势。 性能方面&#…

Django之关系模型的序列化

一、关系模型的序列化-多查1 1.1、模型准备 from django.db import models# Create your models here. class Classes(models.Model):name = models.CharField(max_length=20, verbose_name=班级)class Student(models.Model):SEX_CHOICES = ((1,男)), (2, 女)name = models.C…

Python:百度AI开放平台——OCR图像文字识别应用

一、注册百度AI开放平台 使用百度AI服务的步骤为&#xff1a; 注册&#xff1a;注册成为百度AI开放平台开发者&#xff1b;创建AI应用&#xff1a;在百度API开放平台上创建相关类型的的AI应用&#xff0c;获得AppID、API Key和Secret Key&#xff1b;调用API&#xff1a;调用…

Mac删除软件,动一动手指,几秒就彻底删除 mac删除软件删不掉的解决方法 mac删除软件后怎么删除软件数据

当你入职新公司&#xff0c;接手前任员工使用的Mac电脑时&#xff0c;很可能会遇到一个非常普遍的问题&#xff1a;电脑中装有大量你不需要的软件。这些软件不仅占用宝贵的硬盘空间&#xff0c;还可能影响电脑的运行速度和效率。为了获得一个干净、清爽的使用体验&#xff0c;删…

Spark-Scala语言实战(12)

在之前的文章中&#xff0c;我们学习了如何在spark中使用键值对中的join,rightOuterJoin,leftOuterJoin三种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢…

小林coding图解计算机网络|基础篇01|TCP/IP网络模型有哪几层?

小林coding网站通道&#xff1a;入口 本篇文章摘抄应付面试的重点内容&#xff0c;详细内容还请移步&#xff1a; 文章目录 应用层(Application Layer)传输层(Transport Layer)TCP段(TCP Segment) 网络层(Internet Layer)IP协议的寻址能力IP协议的路由能力 数据链路层(Link Lay…