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. mysql 向上取整

    SELECT CEILING(10.0)    --->10 SELECT CEILING(10.1)    --->11

  2. 数据结构和算法(Golang实现)(19)排序算法-冒泡排序

    冒泡排序 冒泡排序是大多数人学的第一种排序算法,在面试中,也是问的最多的一种,有时候还要求手写排序代码,因为比较简单. 冒泡排序属于交换类的排序算法. 一.算法介绍 现在有一堆乱序的数,比如:5 9 ...

  3. AJ学IOS(01) UI之Hello World与加法计算器

    不多说,AJ分享,必须精品 这两个一个是HelloWorld(左边) 另一个是 加法计算器(右边)的截图. 先运行第一个 程序看看效果 1.打开Xcode(没有哦mac系统的没有xcode的帮你们默哀 ...

  4. qad progress数据库启动出错解决

    1. 启动时报:SYSTEM ERROR: Wrong dbkey in block. Found 0, should be 6342528 in area 36.  (439) ** Save fi ...

  5. 用Python绘制全球疫情变化地图

    目前全球疫情仍然比较严重,为了能清晰地看到疫情爆发以来至现在全球疫情的变化趋势,我绘制了一张疫情变化地图,完整代码共 230 行,需要的朋友在公众号回复关键字 疫情地图 即可. 废话不多说,先上图 下 ...

  6. 解决同层hover事件重叠闪烁问题

    完整代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  7. L25词嵌入进阶GloVe模型

    词嵌入进阶 在"Word2Vec的实现"一节中,我们在小规模数据集上训练了一个 Word2Vec 词嵌入模型,并通过词向量的余弦相似度搜索近义词.虽然 Word2Vec 已经能够成 ...

  8. I - Harmonic Number LightOJ - 1234 (分段打表+暴力)

    题目给的时间限制是3s,所以可以直接暴力来做,注意n的取值范围是1e8,如果开一个1e8的数组会RE.分段打表,可以每100个数记录一次,然后对每次询问先找到它所在的区间,然后在暴力往后找.(学到了~ ...

  9. tensorflow-参数、超参数、卷积核权值共享

    根据网上查询到的说法,参数就是在卷积神经网络中可以被训练的参数,比如卷积核的权值和偏移等等,而超参数是一些预先设定好并且无法改变的,比如说是卷积核的个数等. 另外还有一个最最基础的概念,就是卷积核的权 ...

  10. Intellij IDEA 基础设置,个性化设置,好用的设置→_→

    Intellij IDEA 个性化设置 Appearance & Behavior 外观和行为 Keymap 快捷键 Editor 编辑器设置 Plugins 插件 Version Contr ...