NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))

Description

今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑。不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m。但是大家来的时间不同,随机次序来机房,带电脑的人直接准备比赛而没带电脑的人需要向带电脑并还没和别人公用的人求助(当然会答应)。但是,如果不存在带电脑并还没和别人公用的人,那他就要等了,等是很让人头疼的,这就不和谐了,当然假如没有这样的情况发生比赛是很和谐的。

Input

输入多组数据,每组数据只有一行m(1<=m<=n<=20)和n(1<=n<=20);

Output

输出和谐比赛的场数。

Sample Input

1 2
3 8
4 17

Sample Output

2
110
4655这道题可以看成是递推,也可以用组合数学来解,具体就是卡特兰数。我们把没带电脑的看成0,带电脑的看成1,那么问题就转化成从左向右扫描0的个数不超过1的个数假设某一位0之前0的累计数等于1的累计数,假设之前有m个1,m个0,这个0是第2m+1位,之后有2n-m个1和2n-m-1个0,要出现0的累计数大于1的累计个数这种情形,我们可以增加0的个数,类似于DP那种可以转化问题的思想,但是怎么转化成我们要求解的问题呢?我们可以将2n-m个1变成0,将2n-m-1个0变成1,转化后就会出现0的累计数大于1的累计个数这种情形。答案就是卡特兰数c(q,p+q)-c(q+1,p+q);q代表0的个数。类似于这种转化成01形式求解的还有:给定一个4*3的棋盘,从左下角到右上角,每次只能向右走或者向上走,有多少种方案?我们发现要从左下角到右上角只要向右走四步,向上走三步,用1代表向上走,用0代表向右走,那么问题就转化成由4个0和3个1组成的7位01字符串,这两种形式一一对应,答案就是c(4,7).
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <string>
#define LL long long

using namespace std;

int p, q;
LL f[25][25];

void Init()
{
    memset(f, 0, sizeof(f));
    for (int i = 0; i <= 20; ++i)
    {
        f[i][0] = 1;
    }
    for (int i = 1; i <= 20; ++i)
    {
        for (int j = 1; j <= 20; ++j)
         if(i<j)
            f[i][j]=0;
        else
            f[i][j] = f[i-1][j] + f[i][j-1];
    }
}
LL c[100][100];
void slove()
{
    memset(c,0,sizeof(c));
    for(int i=1;i<=100;i++)
    {
         c[0][i]=1;
         c[1][i]=i;
         c[i][i]=1;
    }
    for(int i=2;i<=100;i++)
        for(int j=2;j<=100;j++)
         c[j][i]=c[j][i-1]+c[j-1][i-1];
}
double C(int m,int n)
{
    double answer1=1,answer2=1;
    for(int i=n-m+1;i<=n;i++)
        answer1*=i;
    for(int i=1;i<=m;i++)
        answer2*=i;
    return answer1/answer2;
}
int main()
{
    //freopen("test.in", "r", stdin);
    slove();
    while (scanf("%d%d", &p,&q) != EOF)
    {
        printf("%lld\n",c[q][p+q]-c[q+1][p+q] );
        printf("%.0lf\n",C(q,p+q)-C(q+1,p+q) );
        Init();
        printf("%lld\n", f[q][p]);
    }
    return 0;
}
				
时间: 2024-10-03 15:01:28

NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))的相关文章

NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(和谐的比赛-dp寻路)

F - 和谐的比赛 Time Limit: 3000 ms        Memory Limit: 10240 KB Submit Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m.但是大家来的时间不同,随机次序来机房,带电脑的人直接准备比赛而没带电脑的人需要向带电脑并还没和别人公用的人求助(当然会答应).但是,如果不存在带电脑并还没和别人公用的人,那

NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(忙碌的选课系统-拓扑排序注意重边)

D - 忙碌的选课系统 Time Limit: 10000 ms        Memory Limit: 65536 KB Submit Description 每学期末,都是万众瞩目的选课时间,由于人数过多,某学校的服务器常常被无数的学生挤的爆掉,这是,教务系统大人说,你们选个课都这么慢,居然还怪我们.于是,每次教务系统都会在服务器快要瘫痪前关闭它.在无数学生的强烈抗议下,教务系统妥协了,再给每个人一次机会,但他让我们用最快的方式决定该选的课程,选上后就退出. 这让大一学渣狗犯了难,在新的选

NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(约翰&#183;亨利-dp)

H - 约翰·亨利 Time Limit: 1000 ms        Memory Limit: 32768 KB Submit Description 十九世纪,铁路开始将美国各大州连接起来.铁路使得人们在不到一周内从国家的这一头旅行到另一头变成现实.在这之前,同样的旅程要花上六个月的时间. 一天,一个商人带着一种用蒸汽驱动的新型钻机来到工地.他说这种机械钻孔速度比十二个工人同时作业还要快.如果这种机器真的像商人所说的那么好,那么铁路公司打算购买它.力大无穷的刚钻工约翰·亨利看着这台机器,

NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(小女警的异世界之战-前序中序求后序)

A - 小女警的异世界之战 Time Limit: 1000 ms        Memory Limit: 65536 KB Submit Description 这一天,小女警花花,泡泡和毛毛来到终极Boss"Him"所在的异世界并准备与其决一死战,却被困在了他的城堡里.她们发现异世界是一个巨大的城堡.城堡由一个个大小不同的房间组成,房间有着以下的规则: 每个房间有且仅有一扇黄门,此外至多有一扇红门和一扇绿门:黄色代表通向更大的房间,绿色和红色代表通向更小的房间.很显然,如果你打开

NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(随机数-水题)[Hobo]

C - 随机数 Time Limit: 1000 ms        Memory Limit: 65536 KB Submit Description 开学了,ACM队的边老板想在学校中请一些妹子一起做一项问卷调查,调查妹子们对ACM的了解情况,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的妹子的编号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.老板怎么会自己去解决这么简单

ACM学习历程—NPU1045 2015年陕西省程序设计竞赛网络预赛(热身赛)C题 Graph Theory(递推 &amp;&amp; 组合数学 &amp;&amp; 大数)

Description In graph theory, a matching or independent edge set in a graph G = (V , E) is a set of edges ME such that no two edges in the matching M share a common vertex. The Nobel Prize in XiXiHaHa was awarded to Jerryxf team, amongst other things,

ZZUOJ - 1245 - 寻找幸福的小L ( 郑州大学第八届ACM大学生程序设计竞赛正式赛F题)

1245: 寻找幸福的小L Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 60  Solved: 14 [Submit][Status][Web Board] Description 小L最近看上了一个女同学叫小A,但是小A是个高冷的姑娘,所以她给小L出了个难题,她给小L留下了一张纸条,上面只有一个坐标,和一个时间,所以小L需要在规定时间找到这个坐标的地点,并在那个时间到哪个地点等待小A,但是很无奈,小L不是一个地理通,所以他找到了小A的室友,想

ZZUOJ-1194-ARM立即数寻址 (郑州大学第七届ACM大学生程序设计竞赛正式赛F题)

Problem F: ARM立即数寻址 Time Limit: 4 Sec  Memory Limit: 128 MB Submit: 53  Solved: 12 [Submit][Status][Web Board] Description 在ARM处理器立即数寻址方式中,立即数是由一个8位的无符号常数(大于等于0,小于等于0xff),先扩展为32位,然后循环右移偶数位得到.所以类似0x101,0x102,0xFF1,0xFF04,0x8000007F等都是无效的立即数,而像0xFF,0x3

2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6154 CaoHaha&#39;s staff 思维

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154 题意:在笛卡尔坐标系下,画一个面积至少为  n 的简单多边形,每次只能画一条边或者一个格子的对角线,问至少要画几条. 解法:如果一个斜着的矩形长宽分别是 a,b,那么它的面积是 2ab.最优解肯定是离 sqrt(n/2)很近的位置.想想 n=5 时答案为什么是7 然后在那个小范围内枚举一下就好了.我给一张做题时画的图 #include <bits/stdc++.h> using namesp