luogu P3223 [HNOI2012]排队】的更多相关文章

本来做了一道  P4901 排队 后来发现自己做错题了...到也都是数学qwq 这题最恶心的就是两只(雾)老师. 那我们分类讨论: 1.两个老师之间是男生: $ A(n,n)*A(n+1,2)*A(n+3,m) $ 首先男生有$ A(n,n)=n! $种排列方式;然后有$ n+1$ 个空隙(加上开头和结尾)可以放老师,所以老师是$ A(n+1,2)=(n+1)!/(n+1-2)!=(n+1)*n$;然后有$ n+3$ 个空隙(加上开头和结尾)可以放女生,所以女生是$ A(n+3,m)=\frac…
LINK:排队\ 原谅我没学过组合数学 没有高中数学基础水平... 不过凭着隔板法的应用还是可以推出来的. 首先考虑女生 发现一个排列数m! 两个女生不能相邻 那么理论上来说存在无解的情况 而这道题好些没有特意去说明无解输出什么. 这里还是尽量特判一下吧.然后考虑要在m-1个空隙中插入人 人可以是男生或者是老师.这里我们假设老师不区别对待 那么就是 n+2个人 我们先强制插入了m-1个人 剩余n+3-m个人 剩下的人 此时存在m+1个空隙了 隔板法可知此时的方案数为C(n+3-m+m+1-1,m…
题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入输出格式 输入格式: 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述. 对于 30%的数据 n<=100,m<=100 对于 100%的数据 n<=2000,m<=2000 输出格式: 输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数.注意答案可能…
题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入输出格式 输入格式: 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述. 对于 30%的数据 n<=100,m<=100 对于 100%的数据 n<=2000,m<=2000 输出格式: 输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数.注意答案可能…
2729: [HNOI2012]排队 Time Limit: 10 Sec Memory Limit: 128 MB Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述. 对于 30%的数据 n≤100,m≤100 对于 100%的数据 n≤2000,m≤2000…
2729: [HNOI2012]排队 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 957  Solved: 449[Submit][Status] Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)   Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述.   对于…
[Luogu 3224] HNOI2012 永无乡 特别水一个平衡树题. 不认真的代价是调试时间指数增长. 我写的 SBT,因为 Treap 的 rand() 实在写够了. 用并查集维护这些点的关系,然后启发式暴力合并,以及找第 \(k\) 小. 就是把子树较小的并到较大的里,一个一个点插入. 因为要插入新的点,给 SBT 预留的空间要大一些.(我试过只改变原来的点的信息,结果失败了.) SBT 需要开的空间为 \(MAXN+MAXM\),因为 \(n\) 个点,每个点最多被插入 \(m\) 次…
[BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述. 对于 30%的数据 n≤100,m≤100 对于 100%的数据 n≤2000,m≤2000 Output 输出文件 output.txt 仅包含一个非负整数,表示不…
luogu P1966 火柴排队 题目链接:https://www.luogu.org/problemnew/show/P1966 显然贪心的想,排名一样的数相减是最优的. 证明也很简单. 此处就不证明了. 然后交换的话就是求一个逆序对. 怎么样排序是一个关键. \(c\)数组的下标是\(a\)的排名,值是\(b\)的值. 这样求逆序对的时候,就是排名为\(i\)的\(a\)数组,会对应上相应排名的\(b\)数组的上. 这也算是一个小技巧吧. #include <algorithm> #inc…
题目描述 Description某中学有n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)输入描述 Input Description输入文件只有一行且为用空格隔开的两个非负整数n 和m,其含义如上所述.输出描述 Output Description仅包含一个非负整数,表示不同的排法个数.注意答案可能很大.样例输入 Sample Input样例输入11 1 样例输入27 3样…
题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入输出格式 输入格式: 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述. 对于 30%的数据 n<=100,m<=100 对于 100%的数据 n<=2000,m<=2000 输出格式: 输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数.注意答案可能…
题面:P3224 [HNOI2012]永无乡 题解: 随便写写 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; ,maxm=maxn,maxq=(3e5)+; ,Q,ans,belong[maxn]; char c; inline int getf(int x){ if(fa[x]==x)return fa[x…
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)   Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述.   对于 30%的数据 n≤100,m≤100   对于 100%的数据 n≤2000,m≤2000 Output 输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数.注意答案可能很大.…
题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述. 对于 30%的数据 n≤100,m≤100 对于 100%的数据 n≤2000,m≤2000 输出 输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数.注意答案可能很大. 样例输入 1 1 样例输出 12 题解…
luogu 因为限制关系只和2和3有关,如果把数中2的因子和3的因子都除掉,那剩下的数不同的数是不会相互影响,所以每次考虑剩下的数一样的一类数,答案为每类数答案的乘积 如果选了一个数,那么2的因子多1的和3的因子多1的数都不能选.假设这个数为\(2^a3^bc\),那就把这个数放在\(i\)行\(j\)列上,现在问题变成这一堆数有多少子集满足没有两个上下或左右相邻元素,那么状压一行的放数状态,一行一行扫过去dp即可 #include<bits/stdc++.h> #define LL long…
题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=2731 (luogu)https://www.luogu.org/problemnew/show/P3219 题解: 先讲一种复杂度明显不对但是本题数据跑得很快的做法: 先按底边\(y\)坐标排序,从下往上扫,每扫到一行链表维护当前的所有区间,另外再开个数组记录每个横坐标被覆盖的次数.复杂度\(O(\sum d_i)\) 然后ckw巨佬的做法: 按底边\(y\)坐标排序,找…
题目传送门 题目描述 某中学有n名男同学,m名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入格式 只有一行且为用空格隔开的两个非负整数n和m,其含义如上所述. 输出格式 输出文件output.txt仅包含一个非负整数,表示不同的排法个数.注意答案可能很大. 数据范围与提示 对于30%的数据:n≤100,m≤100对于100%的数据:n≤2000,m≤2000 题解 一道组合数学的入门题…
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)   Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述.   对于 30%的数据 n≤100,m≤100   对于 100%的数据 n≤2000,m≤2000 Output 输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数.注意答案可能很大.…
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)   Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述.   对于 30%的数据 n≤100,m≤100   对于 100%的数据 n≤2000,m≤2000 Output 输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数.注意答案可能很大.…
题意 \(n\)个男生\(m\)个女生\(2\)个老师排列,任意两个女生不能相邻,两个老师也不能相邻,每个人都不同.问有多少种排法.(\(n, m \le 2000\)) 分析 组合乱搞. 题解 先放男生:\(A(n, n)\)种方案,\(n+1\)格空隙 两个老师不挨在一起放入男生中. 先放老师:\(n+1\)个空隙里放2个老师的方案:\(A(n+1, 2)\) 接着放女生:\(n+3\)个空隙里放m个女生的方案:\(A(n+3, m)\) 总方案:\(A(n, n) * A(n+1, 2)…
组合数学,推一下式子,并不难推. java代码 import java.io.*; import java.math.BigInteger; import java.util.*; public class Main { public static void main(String args[]) throws Exception { Scanner cin=new Scanner(System.in); int n=cin.nextInt();int m=cin.nextInt(); BigI…
题意:找到最小改变对数使a数组的第i大和b数组的第i大相等 则先将a,b,数组编号再排序,则数组显示的就是排名第i的数的编号 再关键一步:c[a[i].id]=b[i].id 实质上就是新建一个数组,按照现有a数组的排布,和b数组进行比较,看是否有逆序对存在,有则需要更换,故再求逆序对即可 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #define dec(i,x,y) for(reg…
这还是一道比较简单的题目,稍微想一下就可以解决.终于有NOIP难度的题目了 首先我们看那个∑(ai-bi)^2的式子,发现这个的最小值就是排序不等式 所以我们只需要改变第一组火柴的顺序,使它和第二组火柴相对应(即大的对大的,小的对小的) 然后我们离散一下,找出每一个数该去的位置 然后注意到这里的交换方式,相邻交换,这就直接转化为求逆序对的问题了 然后直接上树状数组即可 CODE #include<cstdio> #include<algorithm> using namespace…
组合入门题.高精度入门题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int read() { ,f=;char c=getchar(); ;c=getchar();} )+(x<<)+(c^),c=getch…
公式:A(n,n)*A(n+1,2)*A(n+3,m) + A(n,n)*C(m,1)*A(2,2)*C(n+1,1)*A(n+2,m-1) 分情况讨论推出公式 前者为无论何时都合法的,后者为先不合法,然后再合法的(两个老师先站在一 起,然后一个女生 插进来,所以要把这3个人看成一个整体,然后老师可以左右换,所以乘2,女生 就是m选1,然后整体再插入队伍 最后得到上面的式子由于答案较大,所以要写高精 #include<bits/stdc++.h> using namespace std; #d…
题目链接 BZOJ2729 题解 高考数学题... 我们先把老师看做男生,女生插空站 如果两个老师相邻,我们把他们看做一个男生,女生插空站 对于\(n\)个男生\(m\)个女生的方案数: \[n!m!{n + 1 \choose m}\] 还要特判一下没有男生女生的情况 然后高精即可 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cm…
题目大意: 两列数,可以交换每列中相邻的两个数,算作一次交换 求最小的交换次数使两列数相对应的数之差的平方之和最小 思路: 首先可以明确当两列数的排序位置相对应时,为最佳答案 然后我们按照一中排序后在二中排序后出现的位置建一个数组 求一下逆序对 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<…
题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口. 请写一个程序,用来计算至少需要设置几个救援出口,以及不同最少救援出口的设置方案总数. 题目解析 tarjan找双联通分量,找割点. 在一个分量里有 ≥2 个割点,这个分量就怎么都能跑出去,不需要建出口. 在一个分量里有 1 个割点,这个分量就要防止割点…
磕了瓶魔爪. 题目描述 你有两个长度为 NNN 的数组 a,ba,ba,b,试重新排列 aaa 数组使得S=∑i=1n(ai−bi)2S=\sum_{i=1}^{n}{(a_i-b_i)^2}S=i=1∑n​(ai​−bi​)2的值最小.你可且仅可以交换相邻的两个数.求最小交换数对 99,999,99799,999,99799,999,997 取模的值. Solution 容易得到(∑i=1nai)2+(∑i=1nbi)2=S−2∑i=1naibi(\sum_{i=1}^{n}{a_i})^2+…
排列组合题(本文A(n,m)表示从n个元素里选m个的排列数). 首先,老师和女生有不能相邻的限制条件,应该用插空法.而且老师人数较少且固定,把老师和男生进行混合,对女生用插空. 我先来一手错误做法,n个男生先全排列A(n,n),两个老师插空A(n+1,2),m个女生插空A(n+3,m),乘到一起.ans=A(n,n)*A(n+1,2)*A(n+3,m).试一下1,1;差了4.为什么呢?因为我们这种考虑方式忽略了只用一个女生将老师隔开的情况. 那这样就好说了,还是混合加插空,把老师和男生混在一起.…