·最小割和组合数放在了一起,产生了这道题目. 英文题,述大意:     一张初始化为仅有一个起点0,一个终点1和一条边的图.输入n,m表示n次操作(1<=n,m<=50),每次操作是任选一条已存在的边,新建一个编号为(n+1)的节点并向这条边的两个端点连边(共连接两条边).输入n次操作后满足最小割为m的图有多少种.此处两个图相同当且仅当两边集和点集满足双射.答案取模109+7. 分析:      本题要求方案数.首先读题较困难之处是什么样的两个图算不同的方案.知道每次加入的点是有编号的,有编号…
先给出比赛地址啦,感觉这场比赛思维考察非常灵活而美妙. A. Odds and Ends ·述大意:      输入n(n<=100)表示长度为n的序列,接下来输入这个序列.询问是否可以将序列划分成奇数个连续部分,使得每一部分满足:开头结尾是奇数,序列长度也是奇数.如果可以输出Yes否则输出No. ·分析:     我们发现这是一道与奇偶性有关的问题,因此尝试进行一些分类讨论来探求解法.序列需要满足什么特点才能满足题目要求呢?      第一个突破口是:"划分成奇数个序列,每个序列长度为奇…
[链接]点击打开链接 [题意] 让你把一个数组分成奇数个部分. 且每个部分的长度都是奇数. [题解] 很简单的脑洞题. 开头和结尾一定要为奇数,然后 n为奇数的话,就选整个数组咯. n为偶数的话,不能选整个数组. 那么就只能分成3,5,7...个部分. 但是每个部分又要求是奇数. 而奇数乘奇数为奇数. 这和n为偶数抵触. 所以n为偶数直接无解. [错的次数] 0 [反思] 在这了写反思 [代码] /* */ #include <cstdio> #include <iostream>…
[链接]点击打开链接 [题意] n个点,x从左到右严格递增的顺序给出 让你划两条平行的,且没有相同点的直线; 使得它们俩各自最少穿过一个点. 且它们俩穿过了所有的点. [题解] 枚举第一个点和哪个点组成了一条线,把在线上的点去掉,然后看看剩下的点是不是组成了一条和它平行的线.且穿过了所有的点. 再枚举第一个点单独组成一条线的情况. O(n^2)复杂度 [错的次数] 0 [反思] 在这了写反思 [代码] #include <cstdio> #include <iostream> #i…
[链接]点击打开链接 [题意] 让你构造一个大小最多为10W的字符multiset. 你进行n-1次操作; 每次操作,从set中取出两个字符串,一开始单个字符被认为是字符串. 然后把它们连接在一起. (那两个字符串扔掉) 然后花费的计算方式如题目那个式子. 要求你构造出来的multiset进行n-1次操作后,总花费恰好为k. [题解] 相同的字符假如有x个,则最后答案会递增x*(x-1)/2. 因为相同的字符t全都按顺序合并在一起是最优的.(贪心!); (其实观察一下样例就知道了); (然后其他…
[链接]h在这里写链接 [题意] 场上有 n 个点,它们分别向上与向右在不同时刻开始运动,相遇则改变移动方向,求最终这些点到达的坐标. [题解] 先把每个点的坐标都往它本该移动的方向相反的方向退ti个单位. 这样,就相当于每个点都是同时开始运动的了. 想象一下,两个点同时碰撞的条件. 假设碰撞的点坐标为(x,y); 则初始的时候他们的坐标分别为(x-t,y)以及(x,y-t); 会发现,这两个点的x+y的值是一样的. (这里的x,y是每个点都退ti个单位后的点x,y) 所以,能够发生碰撞的条件,…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举那个人收到了几次糖i. 最好的情况显然是其他人都只收到i-1次糖. 然后这个人刚好多收了一次糖 也即 (i-1)kx + x <= n 显然x越大越好. 那么直接令\(x=\frac{n}{( (i-1)*k+1)}\)就好 如果x>M了 那么令x = M; 但这个时候. 要判断一下改变之后的x,按照顺序分的时候是否还能满足这个人收到i次糖. 如果不能收到i次糖的话.跳过.不能统计答案. [代码] #include <…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 先建立一棵字典树. 显然,某一些节点上会被打上标记. 问题就转化成求所有标记的深度的和的最小值了. (标记可以上移,但是不能在同一位置 则我们用树形动规的方法. 从底往上递归处理. 考虑以x为根的一棵子树. 如果这个节点被打上了标记. 那么就直接将答案累加上这个节点的深度. 如果没有打上标记. 那么就把这个子树下面某个深度最高的点移动到这个位置上来. 显然这样贪心做是最优的. 用multiset维护某个子树下面的深度最大值. 然…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 设长度为L的所有区间里面,石头的个数的最小值为k 设取到k的区间为l,r 那么k就为最多能通过的青蛙个数. 假设k再大一点.比如为k+1 那么所有的k+1只青蛙, 肯定会在某个时刻都落在l,r这个长度为L的区间 (无法直接跳过这个区间) 但是这个区间只有k个石头. 所以k+1只肯定有一只无法通过. 所以最多只能为k只青蛙. 然后再考虑方案问题 因为我们k获取的方式. 所以每个长度为l的区间都至少有k个石头. 那么这k只青蛙显然每…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 统计每个人需要的sheet个数. 乘上k 然后除p就是需要的pack个数了 [代码] #include <bits/stdc++.h> #define LL long long #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i >= b;i--) #define all(x) x.begin(),x…