Codeforces Round #789 (Div. 2) F

RK3566/RK3588 NPU性能实测:用mobilenet模型快速验证你的开发板NPU是否正常工作 本文提供了RK3566/RK3588开发板NPU性能实测指南,通过MobileNet模型快速验证NPU是否正常工作。详细介绍了环境搭建、测试资源获取、编译运行及结果分析的全流程,帮助开发者高效验证神经网络加速器功能,为后续AI应用部署奠定基础。 阅读详情

F. Tokitsukaze and Permutations

题意:
给你长度为 n ( n ≤ 1 0 6 ) n(n\leq10^6) n(n≤106)的排列,可以进行 k ( k < n ) k(k<n) k(k<n)次操作,每次操作从 1 1 1遍历到 n n n,如果 a i > a i + 1 a_i>a_{i+1} ai​>ai+1​,则交换两个数字。
给你数组 v ( v i < i ) v(v_i<i) v(vi​<i), v i v_i vi​表示 a 1 ∼ a i − 1 a_1\sim a_{i-1} a1​∼ai−1​中小于 a i a_i ai​的数字的数量
,如果 v i = − 1 v_i=-1 vi​=−1,说明这个地方的结果丢失,可以是任意的值,问有多少种可能的排列,在 k k k次交换后,可以得到数组 v v v,答案对 998244353 998244353 998244353取模。
思路:
首先,对于任意一种构造的 v v v,只要能够满足 v i < i v_i<i vi​<i,都有且只有一种排列能与之对应。
也就是说,只要我们能够任意构造出来不同的 v v v,就会有与之对应的排列能够匹配,那么这样的构造有 n ! n! n!种,但是其中有没有不合法的情况呢?
观察这种操作发现这个操作其实是冒泡排序中的一个回合,在操作完 k k k个回合后,可以保证最后的 k k k个数字一定已经按序归位,且是排列中最大的 k k k个数字,在这种情况下 v n − k + 1 ∼ v n v_{n-k+1}\sim v_n vn−k+1​∼vn​的值只能是 0 0 0,所以刚才的构造不够合理。
只要有 v n − k + 1 ∼ v n v_{n-k+1}\sim v_n vn−k+1​∼vn​的值不为 0 0 0或 − 1 -1 −1,此序列一定无解。
在这里插入图片描述
此外还可以发现,每次操作一次,都会使所有的 v i = m a x ( 0 , v i − 1 ) v_i=max(0,v_i-1) vi​=max(0,vi​−1),然后左移一格,将第一格直接覆盖掉,将 v n = 0 v_n=0 vn​=0
考虑每个格子有多少种情况,总乘积就是我们的答案
操作 k k k次,就会直接覆盖掉前 k k k格,所以前 k k k格不管填什么都没有影响,贡献是 k ! k! k!
接下来是后面的格子,定义 V V V为排列的 v v v, v i = m a x ( V i + k − k , 0 ) v_i=max(V_{i+k}-k,0) vi​=max(Vi+k​−k,0)
若 v i v_i vi​大于 0 0 0,则我们确定 V i + k = v i + k V_{i+k}=v_i+k Vi+k​=vi​+k结果唯一
若 v i = 0 v_i=0 vi​=0,则 V i + k V_{i+k} Vi+k​可以是 0 ∼ k 0\sim k 0∼k贡献为 k + 1 k+1 k+1
若 v i = − 1 v_i=-1 vi​=−1,无法判断,我们只要让 v i < i v_i<i vi​<i即可,贡献为 i i i

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+7;
int a[maxn];
ll mod=998244353;
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int n,k;scanf("%d%d",&n,&k);
		int ok=1;
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
			if(i>=n-k+1 && a[i]>0) ok=0;
		}
		if(!ok)
		{
			puts("0");continue;
		}
		ll ans=1;
		for(int i=k+1;i<=n;i++)
		{
			if(a[i-k]==0) ans=(ans*(k+1))%mod;
			else if(a[i-k]==-1) ans=(ans*i)%mod;
		}
		for(int i=1;i<=k;i++) ans*=i,ans%=mod;
		printf("%lld\n",ans);
	}
}
AI人工智能代理工作流 AI Agent WorkFlow:在股票市场预测中的应用 AI人工智能代理工作流 AI Agent WorkFlow:在股票市场预测中的应用 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 关键词: AI Agent, W 阅读详情

相关推荐

ros1 ubuntu22.04 安装教程

ROS1 ubuntu22.04 安装教程

autolabor的博客 9195

Codeforces Round #789 (Div. 2) F. Tokitsukaze and Permutations

Codeforces Round #789 (Div. 2) Tokitsukaze and Permutations 链接 题意:给出序列c,代表第i位之前有cic_ici​个比他大的数字,如果是-1就是不知道,现在进行k次操作,每次操作如果ai>ai+1a_i > a_{i+1}ai​>ai+1​,就交换这两个数字,直到最后一个,类似冒泡排序,求有多少个排列进行k次操作之后,他的viv_ivi​和给你的viv_ivi​是相同的。 思路:明天来写自己理解的 #include<bit

qq_51672768的博客 409

Robocorp+Robot Framework学习记录【初学者课程:一级课程】

以下内容均来自:https://robotframework.org/?tab=2#getting-started。通过官网的学习和本地实际安装使用体验而来,本文仅记录学习过程。 Robot Framework介绍 Robot Framework 是一个通用的开源自动化框架。它可用于测试自动化和机器人过程自动化 (RPA)。 Robot Framework环境配置及安装 具体请见:Win10环境下安装pytho、pip与Robot Framework 学习过程与等级划分 官方认为Robot Framew.

OwenDom的博客 5374

【luogu CF1677D】Tokitsukaze and Permutations(思维)

定义把一个排列 p 进行一次操作就是从 1 到 n 一次判断如果 i 这个位置大于 i+1 这个位置就交换两个位置的值。 然后我们把一个排列要进行 k 次操作,然后对于每个位置求出前面有多少个比它大的,从而得到一个新的数组 a。 然后给你 a,有一些不确定的地方为 -1,问你有多少个 p 满足条件。...

欢迎您的光顾awa 296

告别单一查询!MultiQueryRetriever在LangChain中的高级用法解析

本文深入解析了LangChain中的MultiQueryRetriever高级用法,该工具通过大语言模型自动生成多样化查询,显著提升文档检索的召回率和准确性。文章详细介绍了其核心机制、高级配置调优策略以及在多语言和专业领域中的实际应用,为开发者提供了优化知识库问答系统的实用方案。

weixin_28730927的博客 271

YOLO26改进策略【YOLO和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制

本文记录的是利用模块优化的目标检测网络模型。模块具有独特优势。它不同于传统模块,能同时兼顾局部特征高效建模与长距离交互学习。常见模块要么在局部特征处理上有优势但长距离交互能力弱,要么反之,而模块克服了此问题。它融合了Mamba模型和线性注意力机制的优势,通过独特的结构设计,能够在保持计算效率的同时,精准地建模局部特征并学习长距离交互信息。本文将其用于的模型改进和二次创新,能够更加关注图像中的重要特征区域,抑制背景等无关信息的干扰,从而突出目标物体的关键特征。Demystify Mamba in Vision

Limiiiing的博客 213

CF 1677D(Tokitsukaze and Permutations-冒泡排序)

已知长度为n的排列,经过k次冒泡(每次把最大的数交换到最后)后,得到的新序列为aia_iai​. vi=∑j=1i−1=[ai<aj]vi=\sum_{j=1}^{i−1}=[a_i<a_j]vi=∑j=1i−1​=[ai​<aj​] 现在已知viv_ivi​的某些地方的值,不知道的记vi=−1v_i=-1vi​=−1, 求合法原排列数。 考虑viv_ivi​和排列达成双射关系。 且1次冒泡会导致viv_ivi​序列整体左移,并减1(若为0则不减)。最后添1位0 也即是 for(int i

nike0good |Oier&ACMer | 熟能生巧 411

lammps 案例in文件汇总

进阶案例: 聚乙烯和石墨烯界面pull out模拟代码 反应力场reax/c设置方法及案例解析 石墨烯热导率模拟代码(NEMD方法) 圆锥形SiC纳米磨削单晶硅源代码 高熵合金FeNiCrCoCu纳米压痕模拟代码 fix indent命令实现纳米摩擦及摩擦力计算 Fe原子辐照轰击多层石墨烯模拟代码 铝基石墨烯复合物压缩变形in文件源代码 石墨烯自动卷曲到Fe纳米线模拟源代码 铝/石墨烯复合物结晶过程lammps模

lammps_jiayou的博客 9445

CF1677D-Tokitsukaze and Permutations【结论】

题目链接:https://www.luogu.com.cn/problem/CF1677D对于一个排列pip_ipi​,定义一个序列v=F(p)v=F(p)v=F(p),其中vi=∑j=1i−1[pj>pi]v_i=\sum_{j=1}^{i-1}[p_j>p_i]vi​=∑j=1i−1​[pj​>pi​]。一次冒泡排序为依次对1∼n−11\sim n-11∼n−1进行:若pi>pi+1p_i>p_{i+1}pi​>pi+1​则交换pi,pi+1p_i,p_{i+1}pi​,pi+1​。现在给出一个序列vv

QuantAsk 610

一.镜头知识之焦点,焦距,有效焦距,前焦距,后焦距

由光学系统中镜片的最后一面到像面的距离。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 5576

【Cmder】--- Windows11 配置CMD神器 (超详细 持续更新中)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

秋知叶i 1万+

Codeforces Round #789 (Div. 2) A~F个人题解

A. Tokitsukaze and All Zero Sequence 题意:有一个长度为n的数组a,每次可以从数组种选择俩个下标不同的元素进行下面俩个操作: (1)如果两个元素相同,把其中一个变成0,() (2)如果两个元素不同,把两个元素都变成这两个的最小值() 问,最少的操作数把数组a全部变成0? 知识点:思维 思路:可以分类一下, 1、如果数组中本来就有0,那操作数一定是不为0的数和0进行(2)操作,答案就是不为0的个数 2、如果数组中没有0,但是有相同的两个元素,那进行一次(1)

qq_53446104的博客 1584

【GlobalMapper精品教程】038:模拟水位上升(洪水淹没分析)案例教程

基于数字高程模型 ( DEM )格网模型,实现给定水深情况下洪水淹没区的计算模型,讨论洪水淹没演进过程可视化实现的关键技术,以三维可视化方式,动态而形象地模拟在指定洪水水位下的洪水淹没演进过程。

智慧空间实验室 2884

Codeforces Round #789 (Div. 2) [已补BCDE,F待补]

Codeforces Round #789 (Div. 2) [已补BCDE,F待补] Problem - B1 - Codeforces tags 贪心 思路 最少操作数:对于11,00这类我们不需要取操作它们,而对于10,01,我们需要把它们改成11或00 所以我们就把a pair看作一组,出现01、10的次数即为我们的操作数 而对于最小字段数量:我们去进行上面操作的时候,把10、01改11、00的时候,取决于前面哪个一对是11还是00,改成与前面相同的,这样修改的pair就不会对子段数量有贡献。

meet snow happy 336

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Codeforces round #789(div2)

b2 题目自己看 题解 : 有贪心和dp两种思路 贪心的意思就是就近原则能变的区间尽量与旁边的区间保持一致 dp的思想就是以为两个数为一个小区间变或者是不变 f[] #include<iostream> #include<cstring> #include<algorithm> #include<unordered_map> #include<cstring> using namespace std; const int N = 2 * 1e5

yyj的博客之旅 422

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Codeforces Round #789 (Div. 2) B~E

Codeforces Round #789 (Div. 2) B~F B.Tokitsukaze and Good 01-String 链接 题意:给出01字符串,要求每次可以修改一个地方,最后要让连续的1和连续的0的长度都是偶数,输出最下操作次数和最后的段数 思路:首先考虑都变成奇数,从头开始每次跳2,假如不一样,说明出现了奇数的0或者1,就需要变成,然后统计段数,当和最后一次记录不同的时候,说明段数加一 #include<bits/stdc++.h> using namespace std;

qq_51672768的博客 334

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Codeforces Round #789 (Div. 2) A~E

Codeforces Round #789 (Div. 2) [Link](Dashboard - Codeforces Round #789 (Div. 2) - Codeforces) A. Tokitsukaze and All Zero Sequence 题意 ​ 给你一个数组,每次你可将ai=aja_i=a_jai​=aj​的一个变成000或者任选两个使得他们等于min(ai,aj)min(a_i,a_j)min(ai​,aj​),问你让数组变成全零的最少操作数 思路 贪心 ​ 贪心来想如果有

a12377978的博客 407

Codeforces Round #789 div2

Round #789 (Div. 2) 文章目录A. Tokitsukaze and All Zero Sequence(签到)B2. Tokitsukaze and Good 01-String (hard version)(贪心)C. Tokitsukaze and Strange Inequality(枚举+前缀和) A. Tokitsukaze and All Zero Sequence(签到) 思路:分类讨论:若序列中有000,ans=n−tt(0)ans=n-tt(0)ans=n−tt(0);若

qq_53287227的博客 583

Codeforces Round #690 (Div. 3)

文章目录Codeforces Round #690 (Div. 3)A.Close TuplesB.Close TuplesC.Close TuplesD.Close TuplesE.Close TuplesF.The Treasure of The Segments Codeforces Round #690 (Div. 3) 比赛的时候f想到思路,写了一半比赛就结束了,难受 A.Close Tuples 题意: 题解: 代码: /* 6 7 3 4 5 2 9 1 1 4 9 2 7 1 11 8 4

m0_49959202的博客 217

Codeforces Round #811 (Div. 3)

1

nttttt の blog 313

Codeforces Round #789 (Div. 2) A B1 B2 C D E

Codeforces Round #789 (Div. 2) A B1 B2 C D E A.Tokitsukaze and All Zero Sequence 题意: 给你一个长度为nnn的aaa数组,你每次操作可以进行下述两种操作的任意一种,求最小操作数使aaa数组所有数变成000: 如果222个数相同,可以使其中一个数变成000。 设两个数为aaa和bbb,可以使其中一个数变成min(a,b)min(a,b)min(a,b)。 思路: 分类讨论,如果存在000,那么最小操作数即非000的个数。 如

qq_53504307的博客 383

Codeforces Round #789 (Div. 2)

D. Tokitsukaze and Meeting 题意: 给定一个01字符串s,代表着一群学生。接下来他们会按顺序进入的矩阵,新进入的会留在,已经进入的推后。 问第 i 个学生进入后,矩阵的有多少行含1,有多少列含1。 做法: 表示第个学生进入后,矩阵有多少行含1。 很明显,可以由转移而来,再判定以结尾的这一段长为的区间是否含1即可。 对于列,手画一下矩阵,发现总是只有那一列在变化,其他的都没有改变过,所以直接开一个数组简单维护一下即可。 char s[N]; int f[N],

ATXTKS的博客 567

Codeforces Round #723 (Div. 2)

Codeforces Round #723 (Div. 2) A. Mean Inequality Example input 3 3 1 2 3 4 5 6 2 123 456 789 10 1 6 9 output 3 1 4 2 5 6 123 10 456 789 9 6 题目大意: 给一个2 n长的元素不重复的数组,任意交换位置,使得任一元素的左右两元素之和不等于本身的两倍,求这个新的数组。 思路: 先从简单的看起,假设a<b<c 或c<b<a, a+c=2 b,那

Story_1419的博客 546

Codeforces Round #789 (Div. 1) B. Tokitsukaze and Meeting

翻译:德木风正在安排会面。会议厅里有𝑛排和𝑚列的座位。有𝑛⋅𝑚的学生参加了会议,其中有几个调皮的学生,也有几个认真的学生。学生被从1到𝑛⋅𝑚打分。学生们将依次进入会场。当𝑖-th学生进入会场时,他将坐在第1排的第1列,已经就座的学生将向后移动一个座位。具体来说,位于𝑖-th行𝑗-th(1≤𝑗≤𝑚−1)列的学生将移动到𝑖-th行的(𝑗+1)列,位于𝑖-th行的𝑚-th列的学生将移动到(𝑖+1)行第1-st列。例如,有一个2排2列的会议厅,如下图所示: 将有4名学生依次进入会场,

ACMer未入门热爱者 369

Codeforces Round #690 (Div. 3) (简单题解记录)

Codeforces Round #690 (Div. 3) 1462A. Favorite Sequence 简单看懂题即可,左边输出一个然后右边输出一个。 void solve() { int n; cin >> n; vector<ll> a(n + 1); // ll a[n + 1]; //两种写法均可 for (int ...

橘嘉禾 75
上一篇: Codeforces Round #787 (Div. 3)F(糖果传递)
下一篇: 2021 Xinjiang Provincial Collegiate Programming Contest(A,B)
不是张胖胖
博客等级 码龄6年 67粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值