题目描述 分析 我们要找的是一段区间的和减去该区间的最大值能否被 \(k\) 整除 那么对于一段区间,我们可以先找出区间中的最大值 然后枚举最大值左边的后缀与最大值右边的前缀之和是否能被 \(k\) 整除 显然暴力枚举肯定会超时 所以我们可以用启发式合并的思想,只枚举长度较小的那一半,而在某种数据结构中查询另一半对应的值 查询的过程可以用主席树,但是常数巨大 其实我们可以对于每一个 \(\%k\) 后的前缀和开一个 \(vector\) \(vector\) 中存放该值出现的位置 然后大力二分即…
题目描述 辣鸡$ljh\ NOI$之后就退役了,然后就滚去学文化课了.他每天都被$katarina$大神虐,仗着自己学过一些姿势就给$katarina$大神出了一道题.有一棵$n$个节点的以$1$号节点为根的树,每个节点上有一个小桶,节点$u$上的小桶可以容纳个小球,$ljh$每次可以给一个节点到根路径上的所有节点的小桶内放一个小球,如果这个节点的小桶满了则不能放进这个节点,在放完所有小球之后就企图去刁难$katarina$大神,让$katarina$大神回答每个节点的小桶内的小球有多少种颜色.…
题目传送门(内部题24) 输入格式 第一行有$3$个整数$n,opt$,$opt$的意义将在输出格式中提到.第二行有$n$个整数,第$i$个整数表示$a_i$. 输出格式 若$opt=1$,输出一行一个整数表示${ans}_1$.若$opt=2$,输出一行一个整数表示${ans}_2$.若$opt=3$,输出两行,第一行一个整数${ans}_1$,第二行一个整数${ans}_2$. 样例 样例输入: 3 36 1 3 样例输出: 786 数据范围与提示 对于所有数据,$1\leqslant n\…
题目描述 分析 \(\sum_{i=0}^p[(p|qi)?0:1]=\sum_{i=0}^p[(p/gcd(p,q)|qi/gcd(p,q))?0:1]=\sum_{i=0}^p[(p/gcd(p,q)|i)?0:1]=p-p/gcd(p,q)\) 代码 #include<cstdio> long long t,p,q,ans; long long gcd(long long aa,long long bb){ if(bb==0) return aa; return gcd(bb,aa%bb…
NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的幂,存map里.接下来枚举左端点,算出比值,枚举右端点,用平衡树便携判断某个数是否已经在区间内出现过. #include<bits/stdc++.h> using namespace std; inline long long read() { long long x=0,fh=1; char c…
在Xunit的基础上,说话模拟测试. 假如我们有这样一个控制器里面有这样一个方法,如图 我们在对Bar测试得时候,如果测试未通过,错误有可能来至于Bar,也有可能错误来至于serverde Foo方法. 这样就会干扰我们对于Bar的测试,因为我们只想测试Bar是否有问题.那我们就可以使用模拟测试,模拟server. 安装Moq包 在NuGet里搜索并安装Moq包. 安装后编写单元测试代码 using Xunit; using Moq; public void MoqTest() { Contro…
题目描述 分析 方法一(线段树) 线段树维护的是以当前节点为左端点的区间的贡献 而区间的右端点则会从 \(1\) 到 \(n\) 逐渐右移 当我们把右端点从 \(i-1\) 的位置扩展到 \(i\) 的位置时 如果原先区间的最近公共祖先到根节点的路径中经过 \(a[i-1]\) 和 \(a[i]\) 的最近公共祖先 那么我们直接把这些区间的价值累加到 \(a[i-1]\) 和 \(a[i]\) 的最近公共祖先上 同时将其子树清空,还要把 \(a[i]\) 位置上的贡献加一 每次移完右端点后都要统…
(sdfz未参加,也就是一共就51个人) 也不粘具体排名了,只写分数线. []220 []201 []194 [5]181 [10]141 [15]132 [20]122 [25]116 [30]103 T1,60分暴力白送.再说. T2,部分分是原题,5分白送,其余暴搜,70+. 先打了140分钟,打了dp,40分. 时间不多,6分钟码完T1,纯暴力无卡常351B,得60分. 回T2,手模样例卡掉,改了17分钟,过全部样例及3组手模.交.0分盖掉40. 剩37分钟.看T3,简单状压部分分很多,…
T1:入阵曲 题目大意:给定一个N*M的矩形,问一共有多少个子矩形,使得矩形内所有书的和为k的倍数. 60%:N,M<=80 枚举矩形的左上角和右下角,用二维前缀和求出数字之和. 时间复杂度$O(N^4)$ 100% 我们发现美剧每个矩形的复杂度已经为N4,那么我们改为枚举矩形的边界.先枚举左右边界,再从上到下枚举下边界,两个矩形相减便可得出所有矩形,枚举时将每个矩形的区间和压入桶中,每次枚举时直接在桶中查询,左右边界更换时清桶.注意下边界要从0开始枚举. 时间复杂度$O(N^3)$ 记得要卡常…
入阵曲 题解 应用了一种美妙移项思想, 我们先考虑在一维上的做法 维护前缀和$(sum[r]-sum[l-1])\%k==0$可以转化为 $sum[r]\% k==sum[l-1]\%k$开个桶维护一下即可 然后拓展到二维上 把两行之间所有行拍扁看作一维上的区间, 我们枚举两行和行之间所有列开个桶维护 $n^2 m$复杂度 for(ll i=1;i<=n;i++) for(ll j=1;j<=i;j++){ flag[0]=1; for(ll q=1;q<=m;q++){ t[q]=(s…