首页 > 其他分享 >「CF1677D」Tokitsukaze and Permutations的题解

「CF1677D」Tokitsukaze and Permutations的题解

时间:2024-03-27 21:45:47浏览次数:15  
标签:le int 题解 Permutations CF1677D Tokitsukaze max define

「CF1677D」Tokitsukaze and Permutations

首先,若 \(v\) 的后 \(k\) 个数中有一个 \(>0\),或有 \(v_i>i-1(i\in[1,n])\),则无解。

我们发现,每次对 \(p\) 进行了一次操作后,\(v\) 也一定会对应的进行一次变化,所以统计 \(p\) 的个数就相当于统计 \(v\) 的个数。

我们对于每一次冒泡排序,有两种情况:

  1. 若 \(\max_{1\le j\le i}\{p_j\}<p_{i+1}\),则 \(v_{i+1}=0\),而 \(v_i=0\)。
  2. 若 \(\max_{1\le j\le i}\{p_j\}>p_{i+1}\),则 \(v_{i+1}>0\),而 \(v_i=\max\{0,v_{i+1}-1\}\)。

我们现在知道了变化后的 \(v\)(设其为 \(v'\)),求出多少个原始的 \(v\),就求出来多少个 \(p\)。

进行了 \(k\) 轮冒泡排序,则 \(v_{i}=\max\{0,v’_{i-k}-k\}\)。

那么,有:

  1. \(1\le i \le k\):\(v_i\) 可以取合法的任意值,也就是 \([0,i-1]\)。

  2. \(k<i\le n\):若 \(v'_{i-k}=0\),则 \(v_i\) 可能为 \([0,k]\);若 \(v'_{i-k}=-1\),则取任意值 \([0,i-1]\);否则的话只有一种情况。

乘法原理一乘即可。

代码:

#include<bits/stdc++.h>
#define p_b push_back
#define m_p make_pair
#define int long long
using namespace std;

const int N=1e6+5,mod=998244353;
int n,k,v[N];
void solve(){
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++) scanf("%lld",&v[i]);
	for(int i=1;i<=n;i++){
		if(v[i]>i-1){
			puts("0");
			return;
		}
	} 
	for(int i=n;i>=n-k+1;i--){
		if(v[i]>0){
			puts("0");
			return;
		}
	} 
	int ans=1;
	for(int i=1;i<=k;i++) ans=(ans*i)%mod;
	for(int i=k+1;i<=n;i++){
		if(v[i-k]==0) ans=(ans*(k+1))%mod;
		if(v[i-k]==-1) ans=(ans*i)%mod;
	} 
	printf("%lld\n",ans);
}
signed main(){
	int T;
	scanf("%lld",&T);
	while(T--){
		solve();
	} 
	return 0;
} 

标签:le,int,题解,Permutations,CF1677D,Tokitsukaze,max,define
From: https://www.cnblogs.com/123456xwd/p/18100312

相关文章

  • [THUWC2018]城市规划的题解
    [THUWC2018]城市规划连通块问题,我们考虑树形DP。设\(f_{u,j}\)表示在以\(u\)为根的子树内,选的颜色集合为\(a_{u},j\)(两个颜色都必须选)且必须选点\(u\)的情况下的连通块个数。特殊的,\(f_{u,a_{u}}\)表示颜色只有\(a_{u}\)的情况数。对于\(v\inson_u\),有:若\(a_{u......
  • 【题解】P10235 [yLCPC2024] C. 舞萌基本练习
    P10235舞萌基本练习题解思路看到最大值最小首先考虑二分答案。由于答案满足单调性,可以二分不优美度的最大值,也就是逆序对数的最大值。我们在每次增加一个元素的时候都要求解当前区间的逆序对数,所以不能用归并排序求逆序对数,考虑树状数组解法。如果不会树状数组求逆序对,请出......
  • 【题解】P4553 80人环游世界
    一眼丁真,鉴定为费用流思路类似于路径覆盖问题。考虑把每个点拆成入点\(x\)和出点\(y\)。对于每个点的入点\(x\)都向这个点的出点\(y\)连一条容量为\(V_i\),费用为\(0\)的边来控制每个点会被访问\(V_i\)次。然后建一个中间点\(p\),连一条\(s\Rightarrowp\)容量......
  • 2023第14届蓝桥杯大赛软件赛省赛C/C++大学A组第6题题解
    目录问题描述:方法一:dfs暴力模拟(45%)方法二:dfs剪枝(100%)问题描述:        小蓝正在一个瓜摊上买瓜。瓜摊上共有n个瓜,每个瓜的重量为Ai。小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。小蓝希望买到的瓜的重量的和恰好为m。请问小蓝至......
  • P7137 [THUPC2021 初赛] 切切糕 题解
    题目传送门前置知识博弈论解法由于本题是CF1628D1GameonSum(EasyVersion)的扩展,故先从CF1628D1GameonSum(EasyVersion)讲解。CF1628D1GameonSum(EasyVersion)设\(x_{i}\)表示第\(i\)轮时Alice选择的数。设\(f_{i,j}\)表示已经进行了\(i\)轮,且......
  • Spring Boot 工程开发常见问题解决方案,日常开发全覆盖
    本文是SpringBoot开发的干货集中营,涵盖了日常开发中遇到的诸多问题,通篇着重讲解如何快速解决问题,部分重点问题会讲解原理,以及为什么要这样做。便于大家快速处理实践中经常遇到的小问题,既方便自己也方便他人,老鸟和新手皆适合,值得收藏......
  • 【赛题解析】【网络建设与运维】第三阶段Linux Vsftpd部分答案解析
    培训、环境、资料、考证公众号:波比网络公众号2:波比网络工作室网络建设与运维群:685678820波比网络专注于技能提升,赋能ftp服务任务描述:请采用ftp服务器,实现文件安全传输。1.配置 linux1为ftp服务器,安装vsftpd,新建本地用户xiaoming,本地用户登陆ftp后的目录为/var/ft......
  • CF1879的题解
    (一)对于第一个问题,直接搜出字符串中有多少个仅由\(0\)或\(1\)组成的串组成的。对于第二个问题,每个串只有一个能选,然后选择顺序有所不同,具体看代码。(二)AC代码。#defineintlonglong#definemd998244353usingnamespacestd;intt,s[200010];charch[200010];sign......
  • CF340B的题解
    (一)枚举对角线。然后分别找正在对角线上方的点与对角线端点构成三角形面积的最大值。和在对角线下方的点与对角线端点构成三角形面积的最大值。如果所有点都在同侧,那么不算。通过过两点直线的解析式求出另一点在直线的哪一侧。(二)AC代码。#include<bits/stdc++.h>#define......
  • CF1864C的题解
    (一)可以将\(x\)转为二进制。考虑一个数的二进制\((1\dots10\dots0)\)。其中,第一个省略号中有什么不确定,第二个省略号里都是\(0\)。易得,每个数都可以看成这种形式。那么可以每次去掉最后一位的\(1\),易证减去的数是原数的因数。最后会得到形如\((10\dots0)\),省略号中全是......