12月份大一周赛解题报告

C 题---Oh, my God!

题目链接: click here

题目翻译:首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中;

然后,待所有字条加入完毕,每人从箱中取一个字条;

最后,如果取得的字条上写的就是自己的名字,那么“恭喜你,中奖了!”

求计算一下发生这种情况的概率吗?

看到大家错了好多次,应该是没认真读题目要求,注意是要求所有人都选到自己名字的概率,而不是求一个人。

用到错排公式,

总体上就是得出n的完全错排方案个数, 然后除以n!即可;关键是求n的完全错排方案个数;

第n个人可以选取前n-1个人中任意一个人的字条,  第n个人有n-1种选择,

假设第n个人取到的是第i个人的字条,这时i可以保留第n个人的字条,剩余的n-2个人完全错排;

若i未保留第n个人的字条,则是除第n个人之外的剩余n-1个人完全错排!递推公式为:f(n) = (n-1)*(f(n-1) + f(n-2));  用到两个数组,注意输出有个小数点。

参考代码:

#include<stdio.h>
int main()
{
    // freopen("1.txt","r",stdin);
    //freopen("2.txt","w",stdout);
    int i,c,n,cc=1;
    double a[21],b[21];
    a[0]=1;
    for(i=1; i<21; i++)
        a[i]=a[i-1]*i;
    b[1]=0;
    b[2]=1;
    b[3]=2;
    for(i=3; i<21; i++)
        b[i]=(i-1)*(b[i-1]+b[i-2]);
    while(~scanf("%d",&n)&&n)
    {
       //scanf("%d",&n);
       printf("Case [%d]: ",cc++);
       if(n==1)
        printf("100.00%%.\n");
       else
    printf("%.2lf%%.\n",b[n]*100/a[n]);
    }
    return 0;
}

E 题---Oh, my Paper!

链接:click here

题意很清晰,

给你一张纸,n(行)*m(列)你要计算的是

算出从一个对角线到另一个对角线有多少走法(只能向上,向右走)。

分析:一个矩阵,它有行有列,要到达对角线,必定有通过所有的行和列,那么存在两种情况,当行(n)==列(m),即刚好走完列和行,在m+n个里选m或n个组合得C(m+n,m)或C(m+n,n)。

当两者不相等,就要看那个先到,所有最小的必定先到达。

另外数据应用unsigned型,它比int型存储的数要大1倍。

参考代码:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef unsigned long long LL;
//#define  LL long long
int main()
{
    //freopen("3.txt","r",stdin);
    //freopen("4.txt","w",stdout);
    LL n, m;
    while(cin>>n>>m)
    {
        if(n==0&&m==0) break;
        LL s=n+m;
        if(n>m) swap(n,m);
        LL ans=1;
        for(LL i=s, j=1; j<=n; i--, j++)
        {
            ans=ans*i/j;//数据很大,所以采用边乘边除
        }
        cout<<ans<<endl;
    }
    return 0;
}
时间: 2024-10-10 06:44:56

12月份大一周赛解题报告的相关文章

2015 暑假集训14级第一周周赛解题报告

A.小模拟题 根据要求模拟即可.没什么可讲的.. 参考代码:http://paste.ubuntu.com/11978075/ B.组合计数 首先排序,然后可以在O(n)复杂度内求出每个hero所能拿的sword的最大范围. 然后可以从第一个开始拿,考虑对于当前第i个hero来说,假设第i个hero最多能拿到第j个sword,那么首先这j个中一定有i-1个已经被前i-1个拿到了,所以第i个只能从后面的剩下的j-i个中选,于是可以拿j-i个.然后用高中学到的组合数学的知识,将每一个的可选个数乘起来

2020-3-14 acm训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019 解题报告+补题报告

2020-3-15比赛解题报告+2020-3-8—2020-3-15的补题报告 2020-3-15比赛题解 训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019  A建筑(模拟) 耗时:3ms 244KB 建筑 你哥哥在最近的建筑问题突破大会上获得了一个奖项 并获得了千载难逢的重新设计城市中心的机会 他最喜欢的城市奈梅根.由于城市布局中最引人注目的部分是天际线, 你的兄弟已经开始为他想要北方和东方的天际线画一些想法

解题报告-2019.12.16

解题报告-2019.12 题目:6-3[拓展编程题_课后练习3][P215 习题8-三-4] 报数 (20分) 题目详情: 报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号.从第一个人开始报数,报到m(<n)的人退出圈子:下一个人从1开始报数,报到m的人退出圈子.如此下去,直到留下最后一个人. 本题要求编写函数,给出每个人的退出顺序编号. 函数接口定义:void CountOff( int n, int m, int out[] ); 其中n是初始人数:m是游戏规定的退出位次(保证为小于

2016.7.12 NOIP2013提高组 day2解题报告(未完成版)

考试马不停蹄地到来,昨天的程序还没改完,今天又考了day2,虽然没有昨天那么懵逼,但还是不尽如人意,现在还没讲题,我打算先自己看一次解题报告,争取加深理解,毕竟一位前辈说过,做一套题的质量取决于题本身的质量和你思考的程度. 考试总结: 1.数据分析推测可行算法很重要,要灵活掌握常用算法的时间复杂度: 2.对拍的方式要熟练,写对拍耗费的时间过多: 3.要加强代码实现的能力,比较突出的表现就是写200-300行多函数模拟或搜索的能力: 4.不要急于写过不完的程序,要多拿一点时间来分析数据,样例不够还

CodeVS第四次月赛解题报告

1.   奶牛的身高 题目描述 Description 奶牛们在FJ的养育下茁壮成长.这天,FJ给了奶牛Bessie一个任务,去看看每个奶牛场中若干只奶牛的身高,由于Bessie是只奶牛,无法直接看出第i只奶牛的身高,而只能看出第i只奶牛与第j只奶牛的身高差,其中第i只奶牛与第j只奶牛的身高差为Ai(i<=n).当A大于0时表示这只奶牛比前一只奶牛高A cm,小于0时则是低.现在,FJ让Bessie总共去看了m次身高,当然也就传回给FJ m对奶牛的身高差,但是Bessie毕竟是奶牛,有时候眼睛可

08年acm区域赛北京赛区 部分题解题报告

08年区域赛北京赛区 http://poj.org/searchproblem?field=source&key=Beijing+2008 POJ 3921 Destroying the bus stations 题目还是比较难的,当时的榜似乎只有4/25的通过/提交,其实题目数据很水.学长转换模型写了网络流求最小割,可以AC,不过自己造了个数据推翻了正确性.我写了个很挫的bfs套bfs,外层是最小的删除点数,内层是求最短路,数据很水可以AC.但比较蛋疼的在于bfs耗内存,而且队列中的点数是阶乘

USACO Section1.1 Friday the Thirteenth 解题报告

friday解题报告 —— icedream61 博客园(转载请注明出处) ------------------------------------------------------------------------------------------------------------------------------------------------[题目] 据说曾经的黑色星期五是13号?本题让我们看看13号与星期五是否比与别的日子更有缘. 给出非负数n,请告诉我在“1900年1月1

解题报告 之 POJ3057 Evacuation

解题报告 之 POJ3057 Evacuation Description Fires can be disastrous, especially when a fire breaks out in a room that is completely filled with people. Rooms usually have a couple of exits and emergency exits, but with everyone rushing out at the same time

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh童鞋的提醒. 勘误2:第7题在推断连通的时候条件写错了,后两个if条件中是应该是<=12 落了一个等于号.正确答案应为116. 1.煤球数目 有一堆煤球.堆成三角棱锥形.详细: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形). -. 假设一共