打表找规律C - Insertion Sort Gym - 101955C
题目链接:https://cn.vjudge.net/contest/273377#problem/C
给你 n,m,k.
这个题的意思是给你n个数,在对前m项的基础上排序的情况下,问你满足递增子序列的长度至少为n-1的排列组合的个数。
具体方法:打表找规律。
打表代码:
#include<bits/stdc++.h>
#include<string>
#include<cstring>
#include<stdio.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn =1000;
int a[maxn];
int vis[maxn];
int ww[maxn][maxn];
int b[maxn];
bool judge(int t,int w)
{
for(int i=1; i<=t; i++)
{
b[i]=a[i];
}
sort(b+1,b+w+1);
memset(vis,0,sizeof(vis));
int ans=0;
int temp;
for(int i=t; i>=1; i--)
{
temp=1;
int maxx=0;
for(int j=i; j<=t; j++)
{
if(b[j]>b[i])
{
maxx=max(maxx,vis[j]);
}
}
vis[i]=maxx+1;
}
for(int i=1; i<=t; i++)
{
if(vis[i]>=t-1)return true;
}
return false;
}
int main()
{
int t=10;
while(1)
{
if(t==0)break;
for(int i=1; i<=t; i++)
{
a[i]=i;
}
do
{
// cout<<t<<endl;
for(int i=1; i<=t; i++)
{
if(judge(t,i))
{
ww[t][i]++;
}
}
// for(int i=0;i<t;i++)
// cout<<a[i]<<" ";
// cout<<endl;
} while(next_permutation(a+1,a+t+1));
t--;
}
for(int i=1; i<=10; i++)
{
for(int j=1; j<=i; j++)
{
cout<<ww[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
/*
1
2 2
5 6 6
10 14 24 24
17 26 54 120 120
26 42 96 264 720 720
37 62 150 456 1560 5040 5040
50 86 216 696 2640 10800 40320 40320
65 114 294 984 3960 18000 85680 362880 362880
82 146 384 1320 5520 26640 141120 766080 3628800 3628800
*/
AC代码:
#include<bits/stdc++.h>
#include<string>
#include<cstring>
#include<stdio.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn =60;
ll dp[maxn][maxn];
ll a[maxn];
ll n,m,k;
void init()
{
a[1]=2;
for(int i=2; i<=50; i++)
{
a[i]=(a[i-1]*i)%k;
}
dp[1][1]=1;
if(m>n)m=n;
for(int i=2; i<=50; i++)
{
dp[i][i]=dp[i][i-1]=(dp[i-1][i-1]*i)%k;
}
for(int i=m+2; i<=50; i++)
{
dp[i][m]=(dp[i-1][m]*2-dp[i-2][m]+a[m]+k)%k;//这里需要加k,因为有可能出现负值
}
}
int main()
{
int T;
scanf("%d",&T);
int Case=0;
while(T--)
{
scanf("%lld%lld%lld",&n,&m,&k);
init();
printf("Case #%d: ",++Case);
printf("%lld\n",dp[n][m]);
}
return 0;
}
打表找规律C - Insertion Sort Gym - 101955C的更多相关文章
- Insertion Sort Gym - 101955C 思路+推公式
题目:题目链接 题意:对长为n的1到n的数列的前k个数排序后数列的最长上升子序列长度不小于n-1的数列的种数,训练赛时怎么都读不明白这个题意,最后还是赛后问了旁队才算看懂,英语水平急需拯救55555 ...
- hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
Nim or not Nim? Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- HDU 5753 Permutation Bo (推导 or 打表找规律)
Permutation Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...
- HDU 4861 Couple doubi (数论 or 打表找规律)
Couple doubi 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/D Description DouBiXp has a ...
- HDU2149-Good Luck in CET-4 Everybody!(博弈,打表找规律)
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...
- HDU 5795 A Simple Nim(SG打表找规律)
SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...
- hdu_5894_hannnnah_j’s Biological Test(打表找规律)
题目链接:hdu_5894_hannnnah_j’s Biological Test 题意: 有n个不同的位置围成一个圈,现在要安排m个人坐,每个人至少的间隔为k,问有多少种安排 题解: 先打表找规律 ...
- hdu_5795_A Simple Nim(打表找规律的博弈)
题目链接:hdu_5795_A Simple Nim 题意: 有N堆石子,你可以取每堆的1-m个,也可以将这堆石子分成3堆,问你先手输还是赢 题解: 打表找规律可得: sg[0]=0 当x=8k+7时 ...
随机推荐
- laraven安装记录
版本4.2.11 下载地址:https://codeload.github.com/laravel/laravel/zip/v4.2.11 步骤: 1.解压到目录 2.下载composer,并放到/u ...
- 【C++】不要在构造函数或析构函数内调用虚函数
这个问题来自于<Effective C++>条款9:永远不要在构造函数或析构函数中调用虚函数 . 假设有如下代码: class Transaction {// 所有交易的基类 public ...
- 【bzoj4305】数列的GCD 组合数学+容斥原理
题目描述 给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N). 现在问题是,对于1到M的每个整数d,有多少个不同的数列b[1], b[2], ..., ...
- 精通android学习笔记(一)---广播
普通广播:sendBroadcast 有序广播:sendOrderedBroadcast,有序广播优先级可以再manifest中设置,数值越大,最先收到.-1000~1000 <receiver ...
- (转)Redis使用详细教程
转载至http://www.cnblogs.com/wangyuyu/p/3786236.html 一.Redis基础部分: 1.redis介绍与安装比mysql快10倍以上 ************ ...
- Debug快捷键
Debug快捷键 1. F5单步调试进入函数内部2. F6单步调试不进入函数内部3. F7由函数内部返回到调用处4. F8一直执行到下一个断点5. F11 重新运行debug
- 3.5 面向连接的运输:TCP
3.5 面向连接的运输:TCP 3.5.1 TCP连接 TCP进行传输之间要进行三次握手建立连接,这个连接不是物理意义上的有一根电线连接,而是应用端两个应用,在逻辑上是已经建立连接了. TCP 不需 ...
- Codeforces 576C. Points on Plane(构造)
将点先按x轴排序,把矩形竖着划分成$10^3$个块,每个块内点按y轴排序,然后蛇形走位上去. 这样一个点到下一个点的横坐标最多跨越$10^3$,一共$10^6$个点,总共$10^9$,一个块内最多走$ ...
- 【CF113D】Museum
Portal --> cf113D Solution 额题意的话大概就是给一个无向图然后两个人给两个出发点,每个点每分钟有\(p[i]\)的概率停留,问这两个人在每个点相遇的概率是多少 如果说我 ...
- python基础----isinstance(obj,cls)和issubclass(sub,super)、反射、__setattr__,__delattr__,__getattr__、二次加工标准类型(包装)
一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否ob ...