数学专题整理

数学专题整理

学习清单

快速幂、矩阵、数论(逆元、容斥、素数筛、高斯消元)、FFT

归纳整理

GCD与LCM

  • GCD计算方式来自公式gcd(a,b)=gcd(b,a%b)
int gcd(int a, int b){
    return b>0? b : a%b;
}
  • LCM计算方式来自性质ab=gcd(a,b)*lcm(a,b)
int lcm(int a, int b){
    return a * b / std::__gcd(a, b);
}
  • 还有一个性质lcm(m*a,m*b)=m*gcd(a,b)

A - GCD LCM

UVA - 11388

题解

给出两个数的GCD和LCM,求这两个数。
从这里学到了GCD和LCM的计算方法和性质,归纳在上面。由性质可以得到,如果存在的话那么L肯定能够被G整除,既然能够整除那么这两个数就可以是G和L

代码

#include <stdio.h>
int main(){
    int t, g, l;
    scanf(“%d”, &t);
    while (t--){
        scanf("%d%d", &g, &l);
        if (l%g) printf("-1\n");
        else printf("%d %d\n", g, l);
    }
    return 0;
}

B - Benefit

UVA - 11889

题意

给出A和C两个数,求一个B,使LCM(A,B)=C
一开始觉得只要B=C/A就行,但是会有问题,比如说A=12,B=16,C=48这个情况,如果只简单地除一下,结果是受到了A的影响的。需要在叠加上它们的最大公约数就可以了。

代码

#include <stdio.h>
#include <algorithm>

int main(){
    int t, a, c, b, g;
    scanf("%d", &t);
    while (t--){
        scanf("%d%d", &a, &c);
        if (c%a){
            printf("NO SOLUTION\n");
            continue;
        }
        b = c / a;
        g = std::__gcd(a, b);
        while (g != 1){
            b *= g;
            a /= g;
            g = std::__gcd(a, b);
        }
        printf("%d\n", b);
    }
    return 0;
}

C - How do you add?

UVA - 10943

题意

DP。
m拆分成k个整数有多少种拆法。
因为个数不多所以直接打表。……个数多了也不会做了。
dp[i][j]=sum(dp[i-1][k]) (0<k<=j)

代码

#include <stdio.h>
#include <string.h>

int main(){
    int a, b, dp[101][101];
    memset(dp, 0, sizeof(dp));
    for (int i = 0; i <= 100; ++i)
        dp[1][i] = 1;
    for (int i = 2; i <= 100; ++i)
        for (int j = 0; j <= 100; ++j)
            for (int k = 0; k <= j; ++k)
                dp[i][j] = (dp[i][j] + dp[i-1][k]) % 1000000;
    
    while (scanf("%d%d", &a, &b), a+b)
        printf("%d\n", dp[b][a]);
    
    return 0;
}

B - Discovering Gold

LightOJ - 1030

题意

数学期望。
你在洞中最深处(位置1),洞内的坐标是[1, n]。你有一颗色子,抛一下,色子上的数字代表你会到达之后的哪一个位置。洞地上有数量不等的黄金,求能得到黄金的期望。
期望公式:

d = p[i]+�(p[i]+p[i+1]+p[i+2]+p[i+3]+p[i+4]+p[i+5]+p[i+6])/6

代码

/******************************
 *File name: LightOJ1030.cpp
 *Author: wzhzzmzzy
 *Created Time: 五  4/14 14:51:32 2017
 *TODO: LightOJ - 1030 概率
******************************/
#include <cstdio>
int main(){
    int t, cas = 0;
    scanf("%d", &t);
    while (t--){
        int n, m[105], sum[105] = {};
        double dp[105] = {};
        scanf ("%d", &n);
        for (int i = 1; i <= n; ++i){
            scanf("%d", m+i);
            dp[i] = m[i];
            sum[i] = sum[i-1] + m[i];
        }
        for (int i = n-1; i >= 1; --i){
            int len = i < n-5? 6 : n - i;
            for (int j = i+1; j <= i+len; ++j)
                dp[i] += dp[j] / len;
        }
        printf("Case %d: %lf\n", ++cas, dp[1]);
    }
    return 0;
}

D - Just another Robbery

LightOJ - 1079

题意

概率、DP。01背包。

代码

/******************************
 *File name: LightOJ1079.cpp
 *Author: wzhzzmzzy
 *Created Time: 五  4/14 15:57:03 2017
 *TODO: LightOJ-1079 期望、dp
******************************/

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;

struct bank{
    double p;
    int m;
}ba[105];
double dp[102][10005], p;
int sum, n;

void solve(){
    for (int i = 1; i <= sum; ++i)
        dp[0][i] = (double)-1;
    dp[0][0] = 0;

    for (int i = 1; i <= n; ++i)
        for (int j = 0; j <= sum; ++j){
            dp[i][j] = dp[i-1][j];
            if (j - ba[i].m >= 0 && fabs(dp[i-1][j-ba[i].m]+1) > (double)1e-7){
                if (fabs(dp[i][j]+1)>(double)1e-7)
                    dp[i][j] = min(dp[i][j], dp[i-1][j-ba[i].m] + (1-dp[i-1][j-ba[i].m])*ba[i].p);
                else
                    dp[i][j] = dp[i-1][j-ba[i].m] + (1-dp[i-1][j-ba[i].m])*ba[i].p;
            }
        }
}

int main(){
    int t, cas = 0;
    scanf("%d", &t);
    while (t--){
        sum = 0;
        scanf("%lf%d", &p, &n);
        for (int i = 1; i <= n; ++i){
            scanf("%d%lf", &ba[i].m, &ba[i].p);
            sum += ba[i].m;
        }
        solve();
        for (int i = sum; i >= 0; --i){
            if (dp[n][i] >= 0.0 && p - dp[n][i] > (double)1e-7){
                printf("Case %d: %d\n", ++cas, i);
                break;
            }
        }
    }
    return 0;
}

E - Birthday Paradox

LightOJ - 1104

题意

暴力、概率。
我的做法是暴力解,因为最多只要不到400人就可以满足条件了。直接暴力跑,卡着TLE的时间过了。

代码

/******************************
 *File name: LightOJ1104.cpp
 *Author: wzhzzmzzy
 *Created Time: 五  4/14 21:55:53 2017
 *TODO: LightOJ-1104 暴力
******************************/

#include <cstdio>
int main(){
    int t, cas = 0, n;
    scanf("%d", &t);
    while (t--){
        int ans = 0;
        scanf("%d", &n);
        
        for (int i = 2; i < 400; ++i){
            double sp = 1;
            for (int j = 1; j < i; ++j){
                sp *= n - j;
                sp /= n;
            }
            if (sp <= 0.5){
                ans = i;
                break;
            }
        }

        printf("Case %d: %d\n", ++cas, ans-1);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容