【Gym 100947C】Rotate It !!】的更多相关文章

分两类,奇数和偶数的,用隔项前缀和算一下. #include <algorithm> #include <iostream> #define N 10005 using namespace std; long long a,t,n,s[N],ans; int main(){ cin>>t; while(t--){ cin>>n>>s[1]; for(int i=2;i<=n;i++){ cin>>a; s[i]=a+s[i-2]…
vp了一场gym,我又开心地划水了. A. Coloring Roads 题意:给定一棵树,树边一开始都是无色的,每次操作可以把一个点到根的路径染成某个颜色,每次询问当前树上出现过某个次数的颜色种数. 题解:看到操作与$Access$类似,考虑使用$lct$解决.由于一条重链的颜色一定是相同的,也就是一棵$splay$中的颜色都是相同的,所以$Access$时每次把整棵$splay$修改掉算一下变化就好了. #include <bits/stdc++.h> using namespace st…
实现数组旋转(循环右移) 如数组 [1, 2, 3, 4, 5, 6, 7],右移 3 位则为 [5, 6, 7, 1, 2, 3, 4] 首先使用泛型函数 void Rotate(void *front, void *middle, void *last) { int frontSize = (char *)middle - (char *)front; int backSize = (char *)last - (char *)middle; char *buffer = (char *)m…
BUPT2017 wintertraining(15) #4H Gym - 101116K 题意 给定一个菜谱,大写的单词代表混合物,小写的代表基础原料.每个混合物由其它混合物或基础原料组成,不会间接或直接地需要自己.制备每个混合物必须先制备组成它的混合物.且混合物都要用一个碗装,当它作为原料去合成其它混合物后,碗就空出来了.求合成第一个混合物最少需要用几个碗. 题解 假设合成一个混合物需要dfs(i)个碗. 因为最后需要合成第一个混合物,所以我们以它为根进行dfs. 假设当前混合物的原料里有t…
BUPT2017 wintertraining(15) #4G Gym - 101124 E.Dance Party 题意 有c种颜色,每个颜色最多分配给两个人,有M个男士,F个女士,求至少一对男士同色的概率. \((1 \le C, M, F \le 10^9; M + F \le 2C)\) 题解 反面比较好求的,也就是不存在男男同色的概率. 假设每个男士依次选择剩下的颜色,第一个人有2C种选择,当前不同色的概率是1,第二个人有2C-1种选择,当前不同色的概率是(2C-2)/(2C-1),第…
BUPT2017 wintertraining(15) #4F Gym - 101124A 题意 给定画框宽度,画的四边和一个对角线长度,求画框外沿周长. 题解 过顶点做画框的垂线,每个角都得到两个全等直角三角形.然后用余弦公式求得四个角,再在直角三角形中计算出比内沿多出来的长度,加上画的四边长度即可. 代码 #include <cstdio> #include <cstring> #include <algorithm> #include <cmath>…
BUPT2017 wintertraining(15) #4E Gym - 101138K 题意 N节车厢的火车,每节车厢容量是1~K,那么有\(K^N\)种火车. 求选择D个连续的且容量相同的车厢的方案恰为T种的火车有多少种 模\(10^9+7\). (1 ≤ D ≤ n ≤ 3333, 0 ≤ T ≤ N - D + 1, 1 ≤ K ≤ \(10^9\)). 题解 \(f[i][j]\)表示前i节车厢,恰有j种选择方案的火车数量,那么 初始条件:\(f[0][0]=1\) 状态转移: 我们…
BUPT2017 wintertraining(15) 4 D Gym - 101138J 数据 题意 n个节点的一棵树,每个节点的权值为g,q个询问,树上的节点U-V,求U到V的路径的最大子段和. 题解 先考虑这么一个问题:求区间[L,R]的最大子段和. q个询问,用线段树可以做到每个询问的时间是O(log n). 线段树的节点x代表区间[L,R],我们要存这些值: sum: 区间[L,R]的总和 s: 区间[L,R]的最大子段和 suml: 最大前缀和 sumr: 最大后缀和 叶子节点这些值…
BUPT2017 wintertraining(15) #4 C Gym - 101138F 题意 初始高度0,目标值h,第i天目标值会下降i,当前高度会改变a[i%n],求高度不小于目标值的最早的时间. 题解 假设最早时间是bn+k天,那么 \(h-(bn+k) (bn+k+1)/2 \le bs[n]+s[k]\) 化成关于b的一元二次不等式,求根公式可以求得最小的整数解. 但是要用long double,否则会WA. 代码 #include <cstdio> #include <c…
BUPT2017 wintertraining(15) #4B Gym - 101138D 题意 a数组大小为n.(1 ≤ n ≤ 50 000) (1 ≤ q ≤ 50 000)(1 ≤ ai ≤ n) q个查询,询问两个区间相同的数有多少对. 题解 [sl,sr]和[tl,tr]区间相同的数的对数可以用\(f[sl,tr]-f[sl,tl]-f[sr,tr]+f[sr,tr]\)计算.\(f[l,r]\)为区间[l,r]内相同的数的对数. 对于每个询问,记录需要计算的f的区间,然后按l/sq…