D. Count the Arrays

也是一个计数题。

题目大意:

要求构造一个满足题意的数列。

  • \(n\) 代表数列的长度
  • 数列元素的范围 \([1,m]\)
  • 数列必须有且仅有一对相同的数
  • 存在一个位置 \(i\),使得小于 \(i\) 这个位置的是严格递增的,大于这个位置则是严格递减的。

这个题目也很容易把自己绕晕,所以我们要想开点。。。

不要去太细节的考虑哪一个位置放什么之类的,而是考虑如何构造满足条件的序列。

因为序列长度是 \(n\),范围是 \(m\),而且又必须有一对相同的数。

所以即从 \(m\) 个数里,挑出 \(n-1\) 个不同的数,自然而然最大的那个数就是最高点。

剩下的除了那两个相同的数之外都有两种选择,在这个最高点的左边或者右边。

对于那两个相同的数只能在最高点的两侧,所以也就没有选择。

然后有一对相同的数,所以此时有 \(n-2\) 种选择。

所以总的方案数就是 :\(C_{m}^{n-1}*2^{n-3}*(n-2)\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
const int mod=998244353;
ll c[maxn],inv[maxn];
void inv3(){
inv[1] = 1;
for (int i = 2; i < maxn; i++) {
inv[i] = (mod - mod / i)*inv[mod%i] % mod;
}
}
void init(int n){
c[0] = 1;
for (int i = 1; i <= n; i++) c[i] = c[i - 1] %mod * (n - i + 1) %mod * inv[i]%mod;
}
long long powmod(long long a, int b) {
long long ret = 1;
while (b) {
if (b & 1)ret = ret * a% mod; //b&1 �������b%2 �ĺ���һ��
a = a * a % mod;
b >>= 1;
}
return ret;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
inv3(),init(m);
if(n==2) printf("0\n");
else {
ll ans=c[n-1]*powmod(2,n-3)%mod*(n-2)%mod;
printf("%lld\n",ans);
}
return 0;
}

D. Count the Arrays 计数题的更多相关文章

  1. [LeetCode]Count and Say 计数和发言

    Count and Say 计数和发言 思路:首先要理解题意,可以发现后者是在前者的基础之上进行的操作,所以我们拿之前的结果作为现在函数的参数循环n-1次即可,接下来就是统计字符串中相应字符的个数,需 ...

  2. ZOJ 3955 Saddle Point 校赛 一道计数题

    ZOJ3955 题意是这样的 给定一个n*m的整数矩阵 n和m均小于1000 对这个矩阵删去任意行和列后剩余一个矩阵为M{x1,x2,,,,xm;y1,y2,,,,,yn}表示删除任意的M行N列 对于 ...

  3. UOJ#428. 【集训队作业2018】普通的计数题

    #428. [集训队作业2018]普通的计数题 模型转化好题 所以变成统计有标号合法的树的个数. 合法限制: 1.根标号比子树都大 2.如果儿子全是叶子,数量B中有 3.如果存在一个儿子不是叶子,数量 ...

  4. 【NOIP2017提高A组模拟9.7】JZOJ 计数题

    [NOIP2017提高A组模拟9.7]JZOJ 计数题 题目 Description Input Output Sample Input 5 2 2 3 4 5 Sample Output 8 6 D ...

  5. noip模拟44[我想我以后会碰见计数题就溜走的]

    noip模拟44 solutions 这一场抱零的也忒多了,我也只有45pts 据说好像是把几套题里面最难的收拾出来让我们考得 好惨烈啊,这次的考试我只有第一题骗了40pts,其他都抱零了 T1 Em ...

  6. FJOI2020 的两道组合计数题

    最近细品了 FJOI2020 的两道计数题,感觉抛开数据范围不清还卡常不谈里面的组合计数技巧还是挺不错的.由于这两道题都基于卡特兰数的拓展,所以我们把它们一并研究掉. 首先是 D1T3 ,先给出简要题 ...

  7. [LeetCode] Count Univalue Subtrees 计数相同值子树的个数

    Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of ...

  8. [LintCode] Count and Say 计数和读法

    The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211, 111221 ...

  9. Codeforces1312D Count the Arrays 组合数学

    题意 给你\(n\)和\(m\),问满足以下条件的数列的个数: 数列长度为\(n\) 数列值域范围为\(\left[1,m\right]\) 数列有且仅有一对相等的数 数列是单峰数列(先严格递增后严格 ...

随机推荐

  1. Golang 性能测试 (3) 跟踪刨析 golang trace

    简介 对于绝大部分服务,跟踪刨析是用不到的.但是如果遇到了下面问题,可以不妨一试: 怀疑哪个协程慢了 系统调用有问题 协程调度问题 (chan 交互.互斥锁.信号量等) 怀疑是 gc (Garbage ...

  2. JAVA开发中相对路径,绝对路径全面总结

    JAVA开发中相对路径,绝对路径全面总结 博客分类: Java综合 JavaJSP应用服务器Servlet网络应用 1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径, ...

  3. IDEA我常用的快捷键

    IDEA快捷键 全屏编写代码:Ctrl+Shift+F12

  4. Threejs从入门到入门

    前言threejs官网:https://threejs.org/ github各个版本:https://github.com/mrdoob/three.js/tags 版本更迭很快,我用的时候还是r9 ...

  5. GeoGebra动态效果

    1.动态绘出f(x) 使用SlowPlot指令 2.GeoGebra的动态来源于两个:滑动条(Slider)和动点(Point) silder简单使用 动点的使用,右击,trace on,如果需要固定 ...

  6. stand up meeting 1/15/2016 && work of weekend 1/16/2016~1/17/2016

    part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云  组内对生词卡片又重新进行了讨论:准备最后的发布和整个开发的整理 ...

  7. 详解 volatile关键字 与 CAS算法

    (请观看本人博文 -- <详解 多线程>) 目录 内存可见性问题 volatile关键字 CAS算法: 扩展 -- 乐观锁 与 悲观锁: 悲观锁: 乐观锁: 在讲解本篇博文的知识点之前,本 ...

  8. 尝试用python开发一款图片压缩工具1:尝试 pillow库

    开发目的 我经常使用图片.公众号文章发文也好,还是生活中要使用素材.图片是一种比文字更加直观的载体.但是图片更加占用带宽,很多软件都对图片有大小限制.图片太大也会影响加载速度.我试过几款图片压缩工具, ...

  9. Python数据预处理:使用Dask和Numba并行化加速

    如果你善于使用Pandas变换数据.创建特征以及清洗数据等,那么你就能够轻松地使用Dask和Numba并行加速你的工作.单纯从速度上比较,Dask完胜Python,而Numba打败Dask,那么Num ...

  10. Linux-Discuz安装LAMP

    1.下载,解压Discuz cd /data/discuz wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip un ...