首页 > 其他分享 >杭电OJ 2048 完全错排的可能性

杭电OJ 2048 完全错排的可能性

时间:2024-03-11 12:12:16浏览次数:28  
标签:OJ 个人 纸条 long 杭电 2048 situation 错排 递推

神、上帝以及老天爷

/*
人数从1到4写手动模拟找出递推规律:
总体上就是得出n的完全错排方案个数, 然后除以n!即可;关键是求n的完全错排方案个数;
第n个人可以选取前n-1个人中任意一个人的字条,第n个人有n-1种选择,假设第n个人取到的是第i个人的字条,
1.这时i可以保留第n个人的字条,剩余的n-2个人完全错排;(要递推就要找是否出现有n-1或n-2完全错排的情况),(i可以保留第n个人的字条的时候满足)(则还要讨论另一种情况若第i个人未保留第n个人的字条)
2.若第i个人未保留第n个人的字条,则相当于除第n个人之外的剩余n-1个人完全错排(因为第i个人不能保留第n个人的纸条)(第2种情况也联系到递推式,相当于!)
第二种情况以纸条ABCDE为例,
A选了纸条B,B未选纸条A,则还剩下纸条ACDE,人BCDE,因为此时B不能选纸条A,在完全错排中人B就相当于人A的作用了(错排人A不能选纸条A),
则纸条ACDE,人BCDE相当于人ACDE与纸条ACDE完全错排
递推公式为:a[n] = (n-1)*(a[n-1] + a[n-2]);
*/

本题考察递推法,就要手动模拟总结出递推的公式。其中,\(n!\)是指全排列的所有排列个数。

神、上帝以及老天爷
#include <iostream>
#include <cstdio>

using namespace std;

const int MAXN = 20 + 5;
long long situation[MAXN];

void Initial()
{
    situation[1] = 0;
    situation[2] = 1;
    for(int i = 3; i < MAXN; ++i) { //第n个人有n-1种选择
        situation[i] = (i - 1) * (situation[i - 1] + situation[i - 2]);
    }
}
//20的阶乘可能超过int范围
long long JieMutipe(int x) {
    long long ans = 1;
    for(int i = 2; i <= x; ++i) {
        ans *= i;
    }
    return ans;
}

int main()
{
    Initial();
    int c, n;
    cin >> c;
    while(c--) {
        cin >> n;
        double answer = (double) situation[n] / JieMutipe(n) * 100;
        printf("%.2f%%\n", answer);
    }
    return 0;
}

要注意用long long保存数据,否则可能越界

参考资料:
杭电OJ2048

标签:OJ,个人,纸条,long,杭电,2048,situation,错排,递推
From: https://www.cnblogs.com/paopaotangzu/p/18065795

相关文章

  • POJ--3258 River Hopscotch(二分搜索/最大化最小值)
    记录10:232023-3-11http://poj.org/problem?id=3259二分法查找最大的可能解,检查x是否符合条件(当前这个位置上的值-前上一个选取位置的值>=x)注意的点:使用了[begin,end)的左闭右开区间,所以结果要begin-1,end要从L+1开始算点击查看代码intL,N,M;introcks[5......
  • 杭电OJ 2039三角形
    三角形这题主要是判定三角形。根据三角形的性质,三条边能够组成一个三角形的条件是任意两边之和大于第三边。因此,可以通过以下步骤来判定:1.将三条边按非递减顺序排序;2.如果最短的两条边之和大于最长的边,则这三条边能够组成一个三角形;否则,不能组成。注意:题目说是三个正......
  • PARA第7部分:创建一个项目网络(PARA Part 7: Creating a Project Network)
    PARA第7部分:创建一个项目网络(PARAPart7:CreatingaProjectNetwork)内容概要:你现在做的每个小项目,其实没那么重要。重要的是:把它们串联起来,形成一个项目网络,发挥出整体的威力。做项目规划时,有3点很重要:项目的规模(要拆小,有助于聚焦)、完成期限,这2点很容易界定;第三点是设定......
  • PARA第6部分:提升专注、创造力和判断力的小批量项目 (Small-Batch Projects for Focus,
    内容简介:这部分主要讲的是把项目拆成小项目,再去执行的重要性。对这些小项目的要求是:短期内可以完成、结果明确并且有最后的完成期限。把项目拆小的好处:可以让我们聚焦于小项目,不再焦虑;有助于捕捉灵感,提高创造力;有助于产生新鲜感,再枯燥的项目也不怕。正文在P.A.R.A第一部分中,我......
  • PARA第五部分:如何制作项目清单(Part5.The Project List Mindsweep)
    内容简介: 本文介绍了如何通过制作项目清单,掌控日常工作生活中的所有项目,不再为事情太多、难以分辨轻重缓急、遗漏重要的事情而抓狂。我们大多数人都认同:重要的事情要优先做。但实际上是:因为各种原因,总是先做 催的紧、容易做的事情。而且,可能会有这种感觉:要做的事情太多,好累;......
  • 杭电OJ 2032杨辉三角
    杨辉三角杨辉三角形这一题型,属于分治法,如果我们使用递归来处理,可以解决但是时间复杂度太高,为\(O(2^n)\),会超时错误,所以应该用递推法,一行一行的把值保存下来,减少大量的重复计算,这样时间复杂度为\(O(n)\),还不错。当然解题思路,无论是递归还是递推,都是一样的,总结递归公式、及递归出......
  • 杭电OJ 2028求n个数的最小公倍数
    LowestCommonMultiplePlus首先,求a、b两个数的最小公倍数很简单,只要先求出其最大公约数,再\(a*b/GCD(a,b)\)。那么求n个数的最小公倍数,思路也是一样的。但是OJ判题一直WA,查了一下别的博客,发现错误的原因是在求公倍数的过程中要先除再乘,防止溢出,即\(a/GCD(a,b)*b\)以及要......
  • 下载Project 2021专业版项目管理软件
    Project2021专业版是微软公司推出的一款功能强大的项目管理软件,可以帮助用户有效地规划、执行和控制项目。主要功能:项目计划:Project2021专业版可以帮助用户创建详细的项目计划,包括任务列表、时间表、资源分配等。资源管理:Project2021专业版可以帮助用户有效地管......
  • Qt开发,报错:Error while building/deploying project untitled (kit: ....)
    1、问题描述 Qt开发,编译时,报错如下:1Cannotfindfile:F:\linux\...\Console.pro.213:49:47:进程"D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe"退出,退出代码2。3Errorwhilebuilding/deployingprojectConsole(kit:DesktopQt5.14.2MSVC201764bit)4......
  • Blazor笔记-Project Struct
    更新记录注意:非教程。纯笔记,日常查询用的。需要教程的小伙伴找几本书看看即可哈哈,有Vue基础的话非常快,概念都是通的。非工作需要不建议深入学习Blazor,深入Vue吧,用的多,哈哈。完整目录地址:https://www.cnblogs.com/cqpanda/p/17596348.html点击查看2024年3月7日发布。2023......