C - Insertion Sort Gym - 101955C

题意:

t组数据,每组数据给你n,k,q,让你求存在多少合法的1~n排列
合法要求:
对排列的前k项进行排序,使得整个序列中最长的递增子序列长度为n-1

题解:

肯定是公式题,利用组合数来推公式,但是我太菜了emm
打表得到:(横坐标为n,纵坐标为k)
代码代码

然后就是对着表找规律,上下做差,可以得到下图,发现每列数都是等差数列,第一列等差为2,第二列为4,第三列为12,第四列为48。。。

继续找规律,我们发现首项都是,i * i!,差为2 * i!,
在第一个图中,对角线的数是K!,然后往下就是+等差数列的和
比如第n行,第k列(n>k),第k行第k列是K!,然后往下n-k个数
“等差数列求和:Sn=N*a1+N(N-1)d/2或Sn=N(a1+an)/2
d = 2 * k!
a1=k * k!
N= n-k
带入得:
Sn = (n-k) * (k * k!) +(n-k) * (n-k-1) *(2 * k!) /2
记得还要加上K!(起始数)
化简得:
k!(n2 - (k+1)n+k+1)

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;int n, m , mod;signed main() {int cas;int tt = 1;cin >> cas;while(cas --) {cin >> n >> m >> mod;int k = 1;if(m >= n - 1) m = n;for(int i = 2; i <= m; i ++) {k *= i % mod;k %= mod;}cout << "Case #" << tt ++ << ": " ;if(m >= n - 1) cout << k << endl;else cout << (k)*(n * n % mod - (m + 1) * n % mod + m + 1 + mod) % mod << endl;}return 0;
}

C - Insertion Sort Gym - 101955C相关推荐

  1. C - Insertion Sort Gym - 101955C(2018icpc沈阳/打表找规律)

    VJ地址 这道题,首先要把表打出来,表打出来 规律就很容易发现了,一列中它们的差值是等差数列,可以发现公差为2 * dp[j][i], 首项为i * dp[j][i]; 很多人都是直接简化公式,我发现 ...

  2. CodeForces - Insertion Sort(打表找规律)

    题目链接:http://codeforces.com/gym/101955/problem/C Time limit:6.0 s Memory limit:1024 MB Problem Descri ...

  3. [Leetcode] Insertion Sort List

    Sort a linked list using insertion sort. 虽然算法很简单,但是链表操作起来实正是烦啊,特别要注意各种边界条件. 1 /** 2 * Definition for ...

  4. leetcode day2 -- Sort List Insertion Sort List

    1.Sort List Sort a linked list in O(n log n) time using constant space complexity. 分析:对链表排序不是第一次见,但是 ...

  5. [Leetcode]147. Insertion Sort List

    Sort a linked list using insertion sort. 链表的插入排序 思路,递归到链表尾,然后循环插入: 1 /** 2 * Definition for singly-l ...

  6. LeetCode 147. Insertion Sort List 链表插入排序 C++/Java

    LeetCode 147. Insertion Sort List 链表插入排序 C++/Java Sort a linked list using insertion sort. A graphic ...

  7. Java实现插入排序及其优化 insertion sort

    本文带来八大排序算法之插入排序. 插入排序(Insertion Sort)属于内部排序算法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的. 插入排序基本思想: 把n个待排序的元 ...

  8. python实现排序算法_python实现·十大排序算法之插入排序(Insertion Sort)

    简介 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法实现步骤 从第一个元素开 ...

  9. c++Insertion Sort插入排序的实现算法(附完整源码)

    C++Insertion Sort插入排序的实现算法 C++Insertion Sort插入排序的实现算法完整源码(定义,实现,main函数测试) C++Insertion Sort插入排序的实现算法 ...

最新文章

  1. 三大软件公司争霸赛区块链
  2. R卡方检验(CHI-SQUARE TEST)
  3. Windows7 IIS 500-内部服务器错误的解决方法
  4. 《树莓派学习指南(基于Linux)》——第 2 章 开始探索 2.1 欢迎使用LXDE
  5. windows下利用sox批量将PCM转为WAV
  6. 操作系统(3) -- 内存管理
  7. Mike and distribution(思维)
  8. 山东省102021年普通高考成绩查询,山东高考成绩今日发布!成绩查询看这里!
  9. linux svn 服务器下载,Linux下搭建SVN服务器完全手册
  10. 关于FragmentManager动态管理Fragment时Fragment生命周期的探究
  11. 大工18秋计算机应用在线作业,大工18秋《计算机应用基础》在线测试2答案.docx...
  12. 大数据分析如何助力企业发展
  13. (9)数据结构-双端队列
  14. CSDN Blog推出专属的离线发布工具 - CSDN剪影
  15. opencv-python 霍夫变换
  16. QQ桌球瞄准器开发(1)桌球瞄准器介绍与使用方法
  17. parallels desktop 网络初始化失败_升级Big Sur后Parallels虚拟机无法联网解决方法
  18. 当无边框窗口被子窗口遮挡导致难以调节窗口大小时,可通过处理 NCHITTEST 消息重新支持调节窗口大小
  19. 用计算机为题目写作400字,以电脑为话题的作文
  20. 『幸运 9 点』IVR游戏商业计划书(转)

热门文章

  1. 牛顿新定律:凭本事得到的,凭什么要还?
  2. 男人是大猪蹄子的证据找到了!
  3. 稳定匹配问题——稳定婚姻算法设计
  4. java解析json_JAVA解析JSON数据
  5. 6计算机系统的组成是,计算机系统的组成(范文)(6页)-原创力文档
  6. epublib java_使用Epublib处理epub文件 | 学步园
  7. php按时间分组的sql语句,(SQL语句)按指定时间段分组统计
  8. tankwar java_TankWar 单机(JAVA版) 版本0.3 画出坦克
  9. 11尺寸长宽 iphone_新手必知LED显示屏尺寸规格及计算方法
  10. cascade down_Cascaded CNN 方法寻找人脸关键点