GZM考试题

本文介绍了GZM考试中涉及的数论问题和策略游戏。在数论问题中,讨论了染色棋盘的期望次数,并利用min-max反演分析;在游戏部分,分析了双方轮流操作的必胜策略,考虑了不同情况下的获胜条件;最后,探讨了一种排列合并的毒瘤DP问题,提出了避免重复计算的方法。

ENDER 太强了 %%%%%% orz

 

一.wait

题目描述

题目描述 有一的棋盘,每次随机染黑一个位置(可能染到已经黑了的),当某一行或者一列全为黑色时停止,求期望染色次数()

输入格式

一行两个正整数

输出格式

期望结果

样例

样例输入1

2 2

样例输出1

3

样例输入2

10 20

样例输出2

397903748

n <= 1000

又是一道数论题.....mmp

前置知识(芝士)

min-max反演

还是安利博客吧,插入公式用不了

分析

好了,但是好像这道题跟反演没有太大关系,需要把题意变一下

令a[i]表示第i行最多需要通过多少步来填满

b[i]表示第i列最多需要通过多少步来填满

那么就有一个集合:S{ a ,b }

那么现在就要算期望值了

 

min(S)=∑T⊆S(−1)|T|+1max(T)

也就是从T就是从a里面随机选i个,b里面从中选j个组成的集合

那么需要染成的格子有: i*m+j*n-i*j

推理:如果只有一个格子需要染色,那么其期望就是 nm

如果有两个格子需要染色,那么期望就是nm/2+nm,先染一个,再染一个

那么k个格子就是nm(1 + 1/2 + 1/3 +....+k/1)

由于条件有限,所以格式不好见谅

那么就可以用这个算出来max(T),min(S)也可以了

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define ll long long
const int MAXN = 1000 * 1003;
const ll mod = 998244353;
ll n , m;
ll niv[MAXN] , sum[MAXN] , fac[MAXN];
ll C ( ll x , ll y ){
    return fac[x] * niv[y] % mod * niv[x-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值