分析

由于每个选手的得分独立,考虑按照选手的最高得分降序排序

如果当前枚举到选手\(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 模拟比赛的更多相关文章

  1. Codeforces Round #558 (Div. 2)C(计算几何,排列组合,模拟)

    #include<bits/stdc++.h>using namespace std;typedef struct{ double k,b;}node;node k[1000007];bo ...

  2. 10.1 csp-s模拟测试(b) X国的军队+排列组合+回文

    T1 X国的军队 贪心,按$b-a$的大小降序排序,然后就贪心吧 #include<iostream> #include<cstdio> #include<algorit ...

  3. csp-s模拟测试10.1(b)X 国的军队,排列组合, 回文题解

    题面:https://www.cnblogs.com/Juve/articles/11615883.html X 国的军队: 好像有O(T*N)的直接贪心做法 其实多带一个log的二分也可以过 先对所 ...

  4. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...

  5. Day4:T3搜索 T4数学题排列组合

    T3:搜索 很出名的题吧,费解的开关 同T2一样也是一题很考思考的 附上题解再解释吧: 对于每个状态,算法只需要枚举第一行改变哪些灯的状态,只要第一行的状态固定了,接下来的状态改变方法都是唯一的:每一 ...

  6. 自然语言处理(NLP) - 数学基础(1) - 排列组合

    正如我在<自然语言处理(NLP) - 数学基础(1) - 总述>一文中所提到的NLP所关联的概率论(Probability Theory)知识点是如此的多, 饭只能一口一口地吃了, 我们先 ...

  7. 学习sql中的排列组合,在园子里搜着看于是。。。

    学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...

  8. 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

  9. 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

  10. 【原创】开源.NET排列组合组件KwCombinatorics使用(一)—组合生成

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

随机推荐

  1. 安装MySql失败( Microsoft Visual C++ 2013 Runtime 64bit)

    参考资料:下载之家 提示你缺少什么版本就安装什么版本.64位或者32位. 文件下载地址:下载之家 不知道有没有失效,如果失效的话大家直接去下载之家搜索下载.

  2. 2-Django之三板斧

    HttpResponse 返回字符串类型的数据 HttpResponse: 这是 Django 自带的类,用于构建基本的 HTTP 响应 我的app名称是demo,我们先按照正常的流程,在views中 ...

  3. X86模拟龙芯与编译 .NET CoreCLR

    目录 .NET 收到一台龙芯机器 编译 CoreCLR 环境要求 部署虚拟机与环境 Linux 安装 KVM 下载需要的文件 启动模拟器 下载 CoreCLR 尝试编译 CoreCLR 前段时间得知龙 ...

  4. Nebula Operator 云上实践

    本文首发于 Nebula Graph Community 公众号 嗨,大家好!Nebula Operator 开源也有一段时间了,之前也有一篇相关的博客介绍,但是实践相关的博客却还没有,现在: 它来了 ...

  5. Java 一悟结束异常处理 Biu丶

  6. Java 递归方法的使用 + 例子

    1 /* 2 * 递归方法的使用 3 * 1.递归方法:一个方法体内调用它自身 4 * 2.方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制 5 * 递归一定要想已知方向 ...

  7. vite启动dev的项目,在nginx做代理的时候,二级目录尾要加/

    vite启动dev的项目,在nginx做代理的时候,二级目录尾要加/ vite dev开发启动的时候, url最后不加/,系统不能使用,所以代理的时候,没加/,代理跳转过去,就回导致页面加载不出来,j ...

  8. 什么叫运行时的Java程序?

    Java程序的运行包含编写.编译和运行三个主要步骤. 1.在编写阶段: 开发人员在Java开发环境中输入程序代码,形成后缀名为.java的Java源文件. 2.在编译阶段: 使用Java编译器对源文件 ...

  9. 曲线艺术编程第一章 coding curves

    原作:Keith Peters 原文:https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) blog: http ...

  10. Wireshark在多媒体开发中的使用

    一 概要: Wireshark(前称Ethereal)是一个网络抓包工具. 是一款非常棒的Unix和Windows上的开源 网络协议分析器.尽可能显示出最为详细的网络封包资料.Wireshark使用W ...