原题:https://ac.nowcoder.com/acm/contest/889/H 题意: 给你一些竹子,q个询问,问你从第l到第r个竹子,如果你要用y次砍完它,并且每次砍下来的长度是相同的,问你第x次砍在哪. 思路: 先求前缀和,(l,r)区间要砍y刀,每刀总长度step=(sum[r]-sum[l-1])/y,第x次砍完必定还剩下总长度为step*(y-x)的竹子.想到可以二分砍的高度,判断砍得偏高还是偏低,可以通过计算剩下得总长度比要求大还是小.设高度为h,则剩下的总长度=\(高度小…
题目链接 传送门 题意 有\(n\)棵竹子,然后有\(q\)次操作,每次操作给你\(l,r,x,y\),表示对\([l,r]\)区间的竹子砍\(y\)次,每次砍伐的长度和相等(自己定砍伐的高度\(len\),该区间大于\(len\)的树木都要砍到\(len\)),问你第\(x\)次砍的高度是多少(注意在经过\(y\)次砍伐后该区间的竹子的高度都会变成\(0\),询问之间互不影响). 思路 由于在\(y\)次砍伐后树木高度都变为\(0\),且每次砍伐的总长度都相等,因此每次砍伐的长度和为该区间内竹…
题意: 标记为\(1-n\)的竹子,\(q\)个询问,每次给出\(l,r,x,y\).要求为砍区间\(l,r\)的柱子,要求砍\(y\)次把所有竹子砍完,每次砍的时候选一个高度,把比他高的都砍下来,并且这\(y\)次砍下来长度都相等,问第\(x\)次砍在什么高度. 思路: 显然就是要求选一个高度砍,使得剩下的高度为\((sum[r] - sum[l - 1]) - (sum[r] - sum[l - 1])/y * x\),那么直接建好主席树,然后二分出这个高度. 主席树好啊. 代码: #inc…
题目链接:https://ac.nowcoder.com/acm/contest/889/H 题意:给出n颗竹子的高度,q次询问,每次询问给出l,r,x,y,每次选取[l,r]中的竹子,砍y次砍掉所有竹子,每次砍下来的竹子长度和是相同的,问你第x次应该砍在哪个高度上 解题思路:由于总共砍的次数已经给出,因此我们可以知道砍x次总共砍的量 Total = $\sum\limits_{i=l}^{r}$h[i]*x/y,那么问题就变成了一个方程$\sum\limits_{i=l}^{r}$max(0,…
题意1.1: 求\(\sum_{i=1}^n Fib^m\mod 1e9+9\),\(n\in[1, 1e9], m\in[1, 1e4]\) 思路1.1 我们首先需要知道斐波那契数列的通项是:\(Fib_i = \frac{\sqrt5}{5}[(\frac{1+\sqrt5}{2})^i-(\frac{1-\sqrt5}{2})^i]\),因为取模是个质数,我们可以用二次剩余定理得到\(\sqrt5 \mod 1e9+9 = 383008016\),然后就可以得到\(\frac{\sqrt5…
#include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long long i,j,n,m,a[1010]/*成功几率*/,sum=0,dp[1010][1010]/*动态规划*/,def[1010]//预处理;long long qpow(long long x,long long y,long long mod)//快速幂{    long long ans=1,tmp=…
题目链接 传送门 题意 求\(n\)个数中子集内所有数异或为\(0\)的子集大小之和. 思路 对于子集大小我们不好维护,因此我们可以转换思路变成求每个数的贡献. 首先我们将所有数的线性基的基底\(b\)求出来(设秩为\(r\)),然后非基地元素的贡献就是\(2^{n-r-1}\),即选择这个数然后其他所有非基底元素都可以选择或者不选择两种方法,选择非基底元素后我们再从基底里面挑出能过把它异或为\(0\)的数选出来就可以达到题目的要求. 对于基底元素\(x\),我们将非基底的\(n-r\)个元素再…
题目是求次大子矩形,那么在求最大子矩形的时候维护M1,M2即可 转移M2时比较的过程要注意一下 #include<bits/stdc++.h> using namespace std; #define maxn 1005 char mp[maxn][maxn]; int n,m,f[maxn][maxn],M1,M2; int stk[maxn],top,w[maxn]; void calc(int i){ top=; f[i][m+]=; memset(w,,sizeof w); ;j<…
/* 给定数组a[],求有多少集合的异或值为0,将这些集合的大小之和求出来 对于每个数来说,如果除去这个数后数组里做出的线性基和这个数线性相关,那么这个数贡献就是2^(n-1-线性基的大小) 反之这个数和线性基线性无关,即数组里凑不出这个数来和其异或等于0,所以贡献就是0 由于做n次线性基很麻烦,所以简化问题,只需要先做出一个基,将数分成在基内和基外即可 首先做出一个线性基base,设其大小为r 然后分情况来讨论: 1.对于线性基外的每个数,其贡献是2^(n-r-1) 2.对于每个线性基内的数字…
题意: 一开始有n人互不认识,每回合有两个人认识,认识具有传递性,也就是相互认识的人组成小团体.现在问你每个回合,挑选四个人,这四个人互不认识,有多少种挑选方法. 题解: 认识不认识用并查集维护即可,重点在于如何统计挑选方法. 每个回合两个人互相认识,排除两个人本就在一个小团体中的情况,实际上就是两个小团体结合为一个. 那么变得无效化的挑选方法,实际上就是两个人分别来自这两个小团体,剩下两个人来自其他小团体的情况. 从其他集合的所有元素先任取两个,再去掉来自同一集合的两个的情况. 减少的数量等于…