Atcoder Regular Contest 058 题解

news/2024/11/20 16:14:49/文章来源:https://www.cnblogs.com/FracturedAngel/p/18558630

ARC058C. Iroha's Obsession *1174

\(n\) 再大一点的就是巨大恶心分类讨论。但我们注意到 \(n \leq 10^4\),所以我们可以直接暴力枚举然后写个 check。首先我们先把被 ban 掉的数存标记一下。然后从 \(n\) 开始往上查,一直查到 \(10^6\) 基本就可以了。然后每次检查一下有没有数位被 ban 掉,没有的话直接输出然后退出就好了。

#include <bits/stdc++.h>
using namespace std;
int n, k, x;
bool D[11];
int main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> n >> k;for(int i = 1; i <= k; i ++) {cin >> x;D[x] = true;}for(int i = n; i <= 1000000; i ++){int ii = i;bool Flag = true;while(ii > 0){if(D[ii % 10]) Flag = false;ii /= 10;}if(Flag) {cout << i << '\n';break;}}return 0;
}

ARC058D. Iroha and a Grid *1905

还算比较经典的组合数学题目。我们注意到 \(n,m\) 非常大,不足以让我们动态规划。但是我们注意到它只 ban 掉一个矩形,于是我们可以考虑分阶段组合计数。

我们先考虑如果没有任何矩形被 ban 掉我们要怎么做。这是简单的,就是 \(\binom{n+m-2}{n-1}\),或者是 \(\binom{n+m-2}{m-1}\),因为由组合恒等式,这两个东西是相等的。

接下来我们考虑它 ban 掉了哪个区域,其实就是 \((n-A+1,1)\)\((n,B)\) 这段区域。那我们考虑把矩阵切了,变为 \((1,1)\)\((n-A,B)\)\((1,B+1)\)\((n,n)\) 这两部分。然后枚举分界点,用乘法原理和加法原理统计它们对于答案的贡献。其实就是

\[\sum_{i=1}^{n-A} \binom{i+B-2}{i-1} \times \binom{n+m-B-i+1}{n-i} \]

然后就做完了。因为我们需要计算组合数,所以我们可能还需要预处理一步阶乘和阶乘逆元。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MAXN = 200005;
const LL MOD = 1e9 + 7;
LL n, m, A, B, fac[MAXN], inv[MAXN];
LL QuickPow(LL a, LL b, LL p)
{LL res = 1;while(b > 0){if(b & 1) res = (res * a) % p;a = (a * a) % p;b >>= 1; }return res;
}
LL C(LL a, LL b) 
{if(a < b) return 0; else return ((fac[a] * inv[b]) % MOD * inv[a - b]) % MOD; 
}
LL calc(LL a, LL b) { return C(a + b - 2, a - 1); }
int main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> n >> m >> A >> B;fac[0] = 1;for(LL i = 1; i <= n + m - 2; i ++) fac[i] = (fac[i - 1] * i) % MOD;inv[n + m - 2] = QuickPow(fac[n + m - 2], MOD - 2, MOD);for(LL i = n + m - 3; i >= 0; i --) inv[i] = (inv[i + 1] * (i + 1)) % MOD;LL ans = 0;for(LL i = 1; i <= n - A; i ++)ans = (ans + (calc(i, B) * calc(n - i + 1, m - B)) % MOD) % MOD;cout << ans << '\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837383.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口文档和编写接口测试用例

一、熟悉接口文档和分析接口 1、发送接口文档 2、分析接口文档 3、了解需要测试接口,分析需求文档接口请求参数:接口返回参数:成功整理接口:(自己项目有哪些借款) cms项目接口:查询接口,登录接口,添加用户接口,用户管理接口,文章管理接口,删除用户接口,删除栏目接…

python代码实现RNN, LSTM, GRU

安装torch, transformers, loguru(本代码实现为下方版本,其余版本实现可比葫芦画瓢自行摸索)pip install torch==1.13.1 transformers==4.44.1 numpy==1.26.4 loguru -i https://pypi.tuna.tsinghua.edu.cn/simple/RNN:Recurrent Neural Network,网络结构如下图所示:import nu…

ChatGPT国内中文版镜像网站整理合集(2024/11/20)

ChatGPT 镜像站的用途 镜像站(Mirror Site)ChatGPT镜像网站是指通过复制原始网站内容和结构,创建的备用网站。其主要目的是在原始网站无法访问时,提供相同或类似的服务和信息。​ 一、ChatGPT中文镜像站 ① yixiaai.com 支持4o以及o1,支持MJ绘画 ② chat.lify.vip 支持通用…

鸿蒙NEXT开发案例:随机数生成

【引言】 本项目是一个简单的随机数生成器应用,用户可以通过设置随机数的范围和个数,并选择是否允许生成重复的随机数,来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统:Windows 10• 开发工具:DevEco Studio NEXT Be…

13、优化器_(执行计划、统计信息)_1

执行计划 一个SQL文本,经过解析,经过解析之后,oracle发现有很多种执行方案,然后oracle在这多种执行方案中,选出一种oracle认为最优的一种执行方案,来作为执行计划,然后oracle按照执行计划一步步去执行 因为oracle有多种的执行方案,但是,有的执行方案快,有的执行方案慢…

12、表的访问方式(索引)_2

表的访问方式 以t1表为例来看表的访问方式 首先创建了一个用户,建立了一张表t1,按照object_id列排序的: SQL> create user u1 identified by u1; -- 创建用户u1 User created.SQL> grant connect,resource,dba to u1; -- 给u1授权 Grant succeeded.SQL> conne…

第十一课 接口测试之postman11.1

一、介绍postman Postman是一个网页调试工具,也可以调试css、html等 Postman的操作环境 环境:Postman Mac、Windows X32、Windows X64、Linux系统、 postman 浏览器扩展程序、postman chrome应用程序 Postman下载:https://www.postman.com/downloads/ 二、postman安装:略 三…

蠢就是坏,坏就是蠢

如题看着如今的社会乱象,我们不禁想:是什么人让我们的社会变成这样? 我们下面来讨论这个问题。 请注意,我们将阻碍社会发展的反动行为定义为坏的,行使这种行为的人定义为坏人。 而我的观点则如标题所示。 第一种 “蠢” 是自以为是,也就是以为自己无所不知,不认同或忽略…

为什么你的工作总是越忙越乱?答案可能出乎意料!

信息过载与任务混乱:现代职场的隐形敌人信息洪流对现代工作的挑战在现代社会,无论个人还是团队,几乎每天都要面对海量的信息。邮件、聊天工具、项目需求文档,甚至口头传递的信息,都让我们感到“时间不够用,信息处理不过来”。这种现象在企业和团队中尤为严重: 信息分散:…

CF1102(*^▽^*)

红黄橙黄绿绿,已完成A.Integer Sequence Dividing CF原题链接 题目大意: 给出\(n\),要求把序列\(1,2,…,n\)分成两个集合,输出两个集合的和的最小差值。\((1\leqslant n\leqslant 2\times 10^{9})\) 解题思路: 我们坚信它是可以分成我们想要的两个差值最小的集合的 差值一…