题目:题目链接

题意:对长为n的1到n的数列的前k个数排序后数列的最长上升子序列长度不小于n-1的数列的种数,训练赛时怎么都读不明白这个题意,最后还是赛后问了旁队才算看懂,英语水平急需拯救55555

思路:明白题意后就很容易了,有一个坑点是k可能比n大,所以我们对k取min(k, n),我们先不考虑前k个数的顺序,比k大的数只能有一个出现在前k个数中,而且是要替换k这个位置的数字,并且最后这个数还要不计入最长上升子序列,可以理解为删掉,如果k + 1存在的话对于这个数要特殊处理,这样后面的那些数必须保证直接是有序的才可以满足题目要求,这种情况有n - k种,如果前k个数最大的数才是k,那么后面的数我们可以选一个不考虑这个数的顺序(最后删掉这个数),组成的种类为1 + (n - k)*(n - k - 1),其中1是每一个数都在排好序的位置上的情况,这里拿出来防止重复计数,对于我们刚刚提到的k + 1存在的情况下,这时我们可以选一个比k小的数来替换,因为最后可以不删掉k + 1而是删掉选定的那个比k小的数。最后,因为前k个数是会排序的,所以我们再乘一个k!就OK啦。

  所以:ans = n - k + 1 + (n - k) * (n - k - 1),如果k + 1存在的话,ans += (k - 1) * (n - k)

AC代码(临近java考试先用java写一段时间代码了5555):

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
Scanner in = new Scanner(System.in); long T, n, k, mod;
T = in.nextLong();
for(long t = 1; t <= T; ++t) {
n = in.nextLong();
k = in.nextLong();
mod = in.nextLong(); k = Math.min(n, k);
long ans = n - k + 1 + (n - k) * (n - k - 1);
if(k < n)
ans += (k - 1) * (n - k);
for(long i = 1; i <= k; ++i)
ans = ans * i % mod;
System.out.println("Case #" + t + ": " + ans);
} in.close();
}
}

Insertion Sort Gym - 101955C 思路+推公式的更多相关文章

  1. 打表找规律C - Insertion Sort Gym - 101955C

    题目链接:https://cn.vjudge.net/contest/273377#problem/C 给你 n,m,k. 这个题的意思是给你n个数,在对前m项的基础上排序的情况下,问你满足递增子序列 ...

  2. [LeetCode] 147. Insertion Sort List 解题思路

    Sort a linked list using insertion sort. 问题:实现单向链表的插入排序. 这是比较常规的一个算法题目. 从左往右扫列表,每次将指针的下一个元素插入前面已排好序的 ...

  3. LeetCode解题报告:Insertion Sort List

    Insertion Sort List Sort a linked list using insertion sort. leetcode subject思路:标准的插入排序.考察一下链表的操作. 对 ...

  4. 【leetcode】Insertion Sort List (middle)

    Sort a linked list using insertion sort. 思路: 用插入排序对链表排序.插入排序是指每次在一个排好序的链表中插入一个新的值. 注意:把排好序的部分和未排序的部分 ...

  5. Java for LeetCode 147 Insertion Sort List

    Sort a linked list using insertion sort. 解题思路: 插入排序,JAVA实现如下: public ListNode insertionSortList(List ...

  6. leetcode:Insertion Sort List

    Sort a linked list using insertion sort. 分析:此题要求在链表上实现插入排序. 思路:插入排序是一种O(n^2)复杂度的算法,基本想法就是每次循环找到一个元素在 ...

  7. bjfu1211 推公式,筛素数

    题目是求fun(n)的值 fun(n)= Gcd(3)+Gcd(4)+…+Gcd(i)+…+Gcd(n).Gcd(n)=gcd(C[n][1],C[n][2],……,C[n][n-1])C[n][k] ...

  8. Insertion Sort List —— LeetCode

    Sort a linked list using insertion sort. 题目大意:将一个单链表使用插入排序的方式排序. 解题思路:先新建一个头指针,然后重新构建一下这个单链表,每次从头找到第 ...

  9. ASC(22)H(大数+推公式)

    High Speed Trains Time Limit: 4000/2000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Su ...

随机推荐

  1. windows系统下同时启动三台Tomcat服务的配置&并设置开机启动服务

    1.tomcat 7.0.82下载地址:链接:https://pan.baidu.com/s/1i51pAgl 密码:mxol 2.解压apache-tomcat-7.0.82-windows-x64 ...

  2. JAXB介绍一

    参考博客: https://www.cnblogs.com/chenbenbuyi/p/8283657.html https://www.cnblogs.com/cnsdhzzl/p/8390514. ...

  3. SpringBoot的优缺点

    优点: 1.快速构建项目 2.对主流开发框架的无配置继承 3.项目可独立运行,无须外部依赖Servlet容器 4.提高运行时的应用监控 5.极大地提高了开发.部署效率 6.与云计算的天然集成 缺点: ...

  4. 跨平台移动开发phonegap/cordova 3.3全系列教程-目录

    目录(更新完成后会附上源码供参考) 第一章 android平台开发 phonegap/cordova简介 1.开发环境搭建 2.helloworld 3.启动画面 4.结合asp.net/jqmboi ...

  5. nginx学习书籍推荐

    最好的书是源码 深入理解NGINX" 陶辉著 <实战Nginx...>张宴 <深入理解Nginx:模块开发与架构解析> nginx开发从入门到精通 Nginx HTT ...

  6. TestNG并发测试包

    https://www.yiibai.com/testng/basic-annotations.html

  7. C# asp.net mvc 注解验证

    看代码,看注解,看懂了单词,没看懂意思. 今日只能专攻一下这项特性. 1.Remote 在看这个例子的时候 ,看了JsonResult 以及 JsonRequestBehavior.AllowGet解 ...

  8. Dll注入:X86/X64 远程线程CreateRemoteThread 注入

    远线程注入原理是利用Windows 系统中CreateRemoteThread()这个API,其中第4个参数是准备运行的线程,我们可以将LoadLibrary()填入其中,这样就可以执行远程进程中的L ...

  9. Android从本地选择图片文件转为Bitmap,并用zxing解析Bitmap

    如何从本地选择图片文件 使用Intent调用系统相册后,onActivityResult函数返回的是Uri格式的路径 /** * 打开系统相册 */ private void openSysAlbum ...

  10. Linux下bash的快捷键

    Ctrl + A  :切换到命令行开始 Ctrl + E :切换到命令行末尾 Ctrl + L : 清屏,相当于clear Ctrl + U :清除剪切光标前的内容 Ctrl + K :剪切清除光标后 ...