#排列组合#C 模拟比赛
分析
由于每个选手的得分独立,考虑按照选手的最高得分降序排序
如果当前枚举到选手\(i\),首先记录\(o_i\)表示在选手\(i\)之前最小得分不低于选手\(i\)的最高得分
(必选,等于必选当且仅当编号比选手\(i\)的原编号小)
然后再枚举从这些必选的当中选择的数量\(j\),那么统计的答案即为\(C_{o_i}^{j}\times C_{i-1-o_i}^{t-j-1}\)
注意枚举的\(k\)也有限制条件
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N = 51;
typedef long long lll;
struct rec {
int rk, mn, mx;
} b[N];
int m, n, a[N], S, T;
lll c[N][N], ans;
inline signed iut() {
rr int ans = 0, f = 1;
rr char c = getchar();
while (!isdigit(c)) f = (c == '-') ? -f : f, c = getchar();
while (isdigit(c)) ans = (ans << 3) + (ans << 1) + (c ^ 48), c = getchar();
return ans * f;
}
inline signed min(int a, int b) { return a < b ? a : b; }
inline signed max(int a, int b) { return a > b ? a : b; }
bool cmp(rec x, rec y) { return x.mx != y.mx ? x.mx > y.mx : x.rk < y.rk; }
signed main() {
freopen("ctsc.in", "r", stdin);
freopen("ctsc.out", "w", stdout);
m = iut(), c[0][0] = 1;
for (rr int i = 1; i <= m; ++i) a[i] = iut();
n = iut();
for (rr int i = 1; i <= n; ++i) c[i][0] = 1;
for (rr int i = 1; i <= n; ++i)
for (rr int j = 1; j <= i; ++j) c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
for (rr int i = 1; i <= n; ++i) {
rr int MN = 0, MX = 0;
for (rr int j = 1; j <= m; ++j) {
rr char c = getchar();
while (c != 'N' && c != 'Y') c = getchar();
if (c == 'N')
continue;
if (a[j] < 0)
MX -= a[j];
else
MN += a[j], MX += a[j];
}
b[i] = (rec){ i, MN, MX };
}
S = iut(), T = iut(), sort(b + 1, b + 1 + n, cmp);
for (rr int i = 1; i <= n; ++i) {
rr int o = 0;
for (rr int j = 1; j < i; ++j)
if (b[j].mn > b[i].mx || (b[j].mn == b[i].mx && b[j].rk < b[i].rk))
++o;
if (o >= S)
continue;//必选超过S人一定不行
for (rr int j = max(T + o - S, 0); j <= min(o, T - 1); ++j) ans += c[o][j] * c[i - 1 - o][T - j - 1];//上界很容易理解,下界因为oi-j>s-t说明我没有的必选超过前s个没有被选择的个数说明不合法
}
return !printf("%lld", ans);
}
#排列组合#C 模拟比赛的更多相关文章
- Codeforces Round #558 (Div. 2)C(计算几何,排列组合,模拟)
#include<bits/stdc++.h>using namespace std;typedef struct{ double k,b;}node;node k[1000007];bo ...
- 10.1 csp-s模拟测试(b) X国的军队+排列组合+回文
T1 X国的军队 贪心,按$b-a$的大小降序排序,然后就贪心吧 #include<iostream> #include<cstdio> #include<algorit ...
- csp-s模拟测试10.1(b)X 国的军队,排列组合, 回文题解
题面:https://www.cnblogs.com/Juve/articles/11615883.html X 国的军队: 好像有O(T*N)的直接贪心做法 其实多带一个log的二分也可以过 先对所 ...
- .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)
今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...
- Day4:T3搜索 T4数学题排列组合
T3:搜索 很出名的题吧,费解的开关 同T2一样也是一题很考思考的 附上题解再解释吧: 对于每个状态,算法只需要枚举第一行改变哪些灯的状态,只要第一行的状态固定了,接下来的状态改变方法都是唯一的:每一 ...
- 自然语言处理(NLP) - 数学基础(1) - 排列组合
正如我在<自然语言处理(NLP) - 数学基础(1) - 总述>一文中所提到的NLP所关联的概率论(Probability Theory)知识点是如此的多, 饭只能一口一口地吃了, 我们先 ...
- 学习sql中的排列组合,在园子里搜着看于是。。。
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(一)—组合生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
随机推荐
- 安装MySql失败( Microsoft Visual C++ 2013 Runtime 64bit)
参考资料:下载之家 提示你缺少什么版本就安装什么版本.64位或者32位. 文件下载地址:下载之家 不知道有没有失效,如果失效的话大家直接去下载之家搜索下载.
- 2-Django之三板斧
HttpResponse 返回字符串类型的数据 HttpResponse: 这是 Django 自带的类,用于构建基本的 HTTP 响应 我的app名称是demo,我们先按照正常的流程,在views中 ...
- X86模拟龙芯与编译 .NET CoreCLR
目录 .NET 收到一台龙芯机器 编译 CoreCLR 环境要求 部署虚拟机与环境 Linux 安装 KVM 下载需要的文件 启动模拟器 下载 CoreCLR 尝试编译 CoreCLR 前段时间得知龙 ...
- Nebula Operator 云上实践
本文首发于 Nebula Graph Community 公众号 嗨,大家好!Nebula Operator 开源也有一段时间了,之前也有一篇相关的博客介绍,但是实践相关的博客却还没有,现在: 它来了 ...
- Java 一悟结束异常处理 Biu丶
- Java 递归方法的使用 + 例子
1 /* 2 * 递归方法的使用 3 * 1.递归方法:一个方法体内调用它自身 4 * 2.方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制 5 * 递归一定要想已知方向 ...
- vite启动dev的项目,在nginx做代理的时候,二级目录尾要加/
vite启动dev的项目,在nginx做代理的时候,二级目录尾要加/ vite dev开发启动的时候, url最后不加/,系统不能使用,所以代理的时候,没加/,代理跳转过去,就回导致页面加载不出来,j ...
- 什么叫运行时的Java程序?
Java程序的运行包含编写.编译和运行三个主要步骤. 1.在编写阶段: 开发人员在Java开发环境中输入程序代码,形成后缀名为.java的Java源文件. 2.在编译阶段: 使用Java编译器对源文件 ...
- 曲线艺术编程第一章 coding curves
原作:Keith Peters 原文:https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) blog: http ...
- Wireshark在多媒体开发中的使用
一 概要: Wireshark(前称Ethereal)是一个网络抓包工具. 是一款非常棒的Unix和Windows上的开源 网络协议分析器.尽可能显示出最为详细的网络封包资料.Wireshark使用W ...