loj #2026. 「JLOI / SHOI2016」成绩比较
#2026. 「JLOI / SHOI2016」成绩比较
题目描述
THU 的 G 系中有许许多多的大牛,比如小 R 的室友 B 神。B 神已经厌倦了与其他的同学比较 GPA(Grade Point Average,平均学分绩),他只在意 G 系中共有多少同学被他“碾压”。
B 神声称,在 G 系共有 kkk 位同学被他碾压。同是 G 系大牛的 D 神则认为 B 神在吹牛,他查到了 B 神每门必修课在 G 系的排名。他用了 173 毫秒的时间就计算出了有多少种情况使得 B 神所说的话成立。现在他想考考聪明的你,看你是否也能求出这个情况数。
G 系共有 nnn 位同学,mmm 门必修课。这 nnn 位同学的编号为 000 到 n−1n - 1n−1 的整数,其中 B 神的编号为 000 号。这 mmm 门必修课编号为 000 到 m−1m - 1m−1 的整数。如果在每门课上 A 获得的成绩均小于等于 B 获得的成绩,则称 A 被 B 碾压。在 B 神的说法中,G 系共有 kkk 位同学被碾压(不包括他自己),而其他 n−k−1n - k - 1n−k−1 名同学则没有被他碾压。
D 神查到了 B 神每门必修课的排名。这里的排名是指,如果 B 神某门课的排名为 rrr,则表示有且仅有 r−1r - 1r−1 位同学这门课的分数大于 B 神的分数,有且仅有 n−rn - rn−r 位同学这门课的分数小于等于 B 神(不包括他自己)。
我们需要求出全系所有同学每门必修课得分的情况数,使其既能满足 B 神的说法,也能符合 D 神查到的排名。这里两种情况不同当且仅当有任意一位同学在任意一门课上获得的分数不同。你不需要像 D 神那么厉害,你只需要计算出情况数模 109+710^9 + 7109+7 的余数就可以了。
输入格式
第一行包含三个正整数 n,m,kn, m, kn,m,k,分别表示 G 系的同学数量(包括 B 神)、必修课的数量和被 B 神碾压的同学数量。
第二行包含 mmm 个正整数,依次表示每门课的最高分 uiu_iui。
第三行包含 mmm 个正整数,依次表示 B 神在每门课上的排名 rir_iri。保证 1≤ri≤n1 \leq r_i \leq n1≤ri≤n。
数据保证至少有 111 种情况使得 B 神的描述成立。
输出格式
输出一行一个正整数,表示满足条件的情况数模 109+710^9 + 7109+7 的余数。
样例
样例输入 1
3 2 1
2 2
1 2
样例输出 1
10
样例说明 1
有且仅有以下 101010 种符合条件的情况:
| # | B 神・课程 0 | B 神・课程 1 | 同学 A・课程 0 | 同学 A・课程 1 | 同学 B・课程 0 | 同学 B・课程 1 |
|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 | 1 | 2 |
| 2 | 1 | 1 | 1 | 2 | 1 | 1 |
| 3 | 2 | 1 | 1 | 1 | 1 | 2 |
| 4 | 2 | 1 | 1 | 1 | 2 | 2 |
| 5 | 2 | 1 | 1 | 2 | 1 | 1 |
| 6 | 2 | 1 | 1 | 2 | 2 | 1 |
| 7 | 2 | 1 | 2 | 1 | 1 | 2 |
| 8 | 2 | 1 | 2 | 1 | 2 | 2 |
| 9 | 2 | 1 | 2 | 2 | 1 | 1 |
| 10 | 2 | 1 | 2 | 2 | 2 | 1 |
样例输入 2
5 3 2
4 3 2
2 1 2
样例输出 2
54096
数据范围与提示
| Case # | nnn | mmm | uiu_iui |
|---|---|---|---|
| 1 | ≤3\leq 3≤3 | ≤3\leq 3≤3 | ≤4\leq 4≤4 |
| 2 | ≤3\leq 3≤3 | ≤10\leq 10≤10 | ≤100\leq 100≤100 |
| 3 | ≤3\leq 3≤3 | ≤100\leq 100≤100 | ≤109\leq 10^9≤109 |
| 4, 5 | ≤5\leq 5≤5 | ≤100\leq 100≤100 | ≤109\leq 10^9≤109 |
| 6, 7 | ≤50\leq 50≤50 | ≤50\leq 50≤50 | ≤50\leq 50≤50 |
| 8 ~ 10 | ≤100\leq 100≤100 | ≤100\leq 100≤100 | ≤109\leq 10^9≤109 |
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 110
#define mod 1000000007
using namespace std;
int n,m,K,u[maxn],r[maxn],ans,a[maxn][maxn];
bool check(){
int cnt,flag;
for(int i=;i<=m;i++){//枚举每门学科
cnt=;
for(int j=;j<=n;j++)
if(a[j][i]>a[][i])cnt++;
if(cnt!=r[i]-)return ;
}
cnt=;
for(int i=;i<=n;i++){
flag=;
for(int j=;j<=m;j++)
if(a[i][j]>a[][j]){flag=;break;}
if(flag==)cnt++;
}
if(cnt==K)return ;
else return ;
}
void dfs(int pos1,int pos2){
if(pos2==m+)pos1=pos1+,pos2=;
if(pos1==n+){ans+=check();return;}
for(int i=;i<=u[pos2];i++){
a[pos1][pos2]=i;
dfs(pos1,pos2+);
}
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d%d%d",&n,&m,&K);
for(int i=;i<=m;i++)scanf("%d",&u[i]);
for(int i=;i<=m;i++)scanf("%d",&r[i]);
dfs(,);
printf("%d",ans);
}
10分 暴力
loj #2026. 「JLOI / SHOI2016」成绩比较的更多相关文章
- LOJ #2026「JLOI / SHOI2016」成绩比较
很好的锻炼推柿子能力的题目 LOJ #2026 题意 有$n$个人$ m$门学科,第$ i$门的分数为不大于$U_i$的一个正整数 定义A「打爆」B当且仅当A的每门学科的分数都不低于B的该门学科的分数 ...
- 【LOJ】#2026. 「JLOI / SHOI2016」成绩比较
题解 用\(f[i][j]\)表示考虑了前i个排名有j个人被碾压 \(f[i][j] = f[i - 1][k] \* C[k][j] \* C[N - k - 1][N - r[i] - j] \* ...
- loj #2024. 「JLOI / SHOI2016」侦查守卫
#2024. 「JLOI / SHOI2016」侦查守卫 题目描述 小 R 和 B 神正在玩一款游戏.这款游戏的地图由 nnn 个点和 n−1n - 1n−1 条无向边组成,每条无向边连接两个点, ...
- loj #2025. 「JLOI / SHOI2016」方
#2025. 「JLOI / SHOI2016」方 题目描述 上帝说,不要圆,要方,于是便有了这道题. 由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形.上帝把我们派到了一个有 NNN ...
- loj2026 「JLOI / SHOI2016」成绩比较
orz #include <iostream> #include <cstdio> using namespace std; typedef long long ll; int ...
- 【LOJ】 #2025. 「JLOI / SHOI2016」方
题解 有什么LNOI啊,最后都是JLOI罢了 一道非常--懵逼的统计题 当然是容斥,所有的方案 - 至少有一个点坏掉的正方形 + 至少有两个点坏掉的正方形 - 至少有三个点坏掉的正方形 + 至少有四个 ...
- 【LOJ】#2024. 「JLOI / SHOI2016」侦查守卫
题解 童年的回忆! 想当初,这是我考的第一次省选,我当时初二,我什么都不会,然后看着这个东西,是不是能用我一个月前才会的求lca,光这个lca我就调了一个多小时= =,然后整场五个小时,我觉得其他题不 ...
- loj2024「JLOI / SHOI2016」侦查守卫
too hard #include <iostream> #include <cstdio> using namespace std; int n, d, m, uu, vv, ...
- Loj #2495. 「AHOI / HNOI2018」转盘
Loj #2495. 「AHOI / HNOI2018」转盘 题目描述 一次小 G 和小 H 原本准备去聚餐,但由于太麻烦了于是题面简化如下: 一个转盘上有摆成一圈的 \(n\) 个物品(编号 \(1 ...
随机推荐
- Java并发 两个线程交替执行和死锁
今天看到一个题:两个线程交替打印奇数和偶数,即一个线程打印奇数,另一个打印偶数,交替打印从1到100.想了下有多重实现方法. wait和notify方法: public class OddEven { ...
- java代码输出质因数
package com.badu; import java.util.Scanner; //分解质因数问题: //从键盘输一个数, //首先最小质因数为2 //n不能被2整除时, //n能被2整除时, ...
- 创建github怎样管理
创建版本库 第一步: 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录 $mkdir learngit $cd learngit $pwd mkdir learngit 创建一个名叫“ ...
- PostgreSQL 备份和恢复
备份和恢复有三种不同的基本方法来备份PostgreSQL数据SQL转储文件系统级备份File system level backup连续归档 1. SQL转储 pg_dump dbname > ...
- hibernate 事务的隔离级别
脏读不可重复读幻读可序列化(符合事务的四个特性的正常情况 ) 解释: 脏读:事务A对数据1做了更新,但是还没有来得及提交 此时事务B对数据1进行了查询获得了事务A更新后的数据, 但是事务A因为一些原因 ...
- centos软件安装目录(amp目录)
entos安装软件的目录 1. 如果是rpm安装的可以:rpm -ql package-name 2. 可以在根目录上直接find . -name 软件中的某个文件名 不过安装软件一般都在/usr/l ...
- 12-22C#公共控件(基本功能)
在C#窗体中,公共控件的基本功能: 1.获取.设置控件的参数值: 2.事件(其实是一种特殊的方法和属性,当被其他外力触发它,就会发生,类似数据库的触发器.) 下面是基本的公共控件: 1.复选框 1)设 ...
- 剑指offer 38_统计数组中k出现的个数
思路: 二分法,分别找出第一个和最后一个k出现的位置.相减 加一 #include <stdio.h> //获取第一个K的位置 int getFirstK (int k,int *numb ...
- findall 、 search的使用
- Android远程服务(AIDL)实现步骤
AIDL是安卓接口定义语言的缩写 由于笔者使用的是android studio所以建立AIDL文件的位置也需要注意,要在APPNAME->main->aidl->packagenam ...