【hihocoder#1388】Periodic Signal NTT】的更多相关文章

题目链接:http://hihocoder.com/problemset/problem/1388?sid=974337 题目大意:找出一个$k$,使得$\sum_{i=0}^{n-1}(A_{i}-B_{i+k \quad mod \quad n})^{2}$最小 把那个式子拆开..得到: $\sum _{i=0}^{n-1} A_{i}^{2}+\sum_{i=0}^{n-1}B_{i}^{2}-\sum_{i=0}^{n-1}2*A_{i}*B_{i+k}$ 前面的两个和式是定值,所以最小…
传送门:hihocoder #1388 : Periodic Signal 先来几个大牛传送门:  (模板) NTT long long 版 解法一:因为我们知道FFT会精度不够,所以坚持用NTT,但是模数不够大,然后就一直GG,看来我们的搜索姿势也有问题,居然没有搜到上面大神的板子,真的是GG http://www.cnblogs.com/WABoss/p/5903927.html /*******************************************************…
#1388 : Periodic Signal   描述 Profess X is an expert in signal processing. He has a device which can send a particular 1 second signal repeatedly. The signal is A0 ... An-1 under n Hz sampling. One day, the device fell on the ground accidentally. Prof…
[题目链接]:http://hihocoder.com/problemset/problem/1298 [题意] [题解] 用欧拉筛法; 能够同时求出1..MAX当中的所有质数和所有数的欧拉函数的值; 基于 以下理论; 如果 ① n=p^k;这里p是某个质数; (则只有p的倍数和n是不互质的) 则 phi[n]=pk−1−(pk/p−1)=(p−1)∗pk−1 ② n为质数; phi[n] = n-1 ③ 若n和p互质;则 phi[n∗p]=phi[n]∗phi[p] 根据上面那3个结论; ①若…
[题目链接]:http://hihocoder.com/problemset/problem/1297 [题意] [题解] 问题可以转化为数学问题 即(s1+v1*t)%m == (s2+v2*t)%m···① 也即 (s1+v1*t-(s2+v2*t))%m==0 也即 (s1-s2)+(v1-v2)*t=k*m 也即 (v2-v1)*t+m*k=(s1-s2) 与 A*X+B*y=C对应; 这里如果C是gcd(A,B)的倍数,则有解; 为了方便起见 我们在A<0的时候,把A和C都取相反数(相…
[题目链接]:http://hihocoder.com/problemset/problem/1296 [题意] [题解] [Number Of WA] 0 [完整代码] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long long #define rep1(i,a,b) for (int i = a…
[题目链接]:http://hihocoder.com/problemset/problem/1295 [题意] [题解] 可以在O(N)的复杂度内求出1..N里面的所有素数; 当然受空间限制,N可能也就是几百万的样子吧; 再低一点的话用朴素的筛法都能过了: 它的思路主要是; 抓住每个合数的最小的质因数是唯一的这一点; 然后避免每个合数被多次计算到; 因此每次枚举的都是质因数的倍数; 同时i%prim[j]==0直接break掉那点也很巧妙; 这里找到了break掉的原理↓↓ /* 算法最难理解…
[题目链接]:http://hihocoder.com/problemset/problem/1287 [题意] [题解] 取的底数必须是小于等于n-1的; 那12个数字能通过2^64以内的所有数字; [Number Of WA] 0 [完整代码] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long…
[题目链接]:http://hihocoder.com/problemset/problem/1333 [题意] [题解] 伸展树; 要求提供操作: 1.插入一个元素,两个权值,id作为查找的比较权值,val作为储存信息; 2.将id在[a..b]范围内的点的val值改变d;d能为负值 3.将id在[a..b]范围内的点全部删掉; 4.查询id在[a..b]范围内的点的val值的和; 区间的更改要用到懒惰标记; 权值和,则需要在node域里面加一个变量,存当前子树的val和; 在旋转,插入,删除…
[题目链接]:http://hihocoder.com/problemset/problem/1329 [题意] [题解] 插入操作:-,记住每次插入之后都要把它放到根节点去就好; 询问操作:对于询问x,然后找到权值为x+1的这个节点的左子树中的最大值;(如果没有这个x+1节点,则自己插入一个,之后删掉就好); 删除操作:插入两个节点l和r;然后找到小于l且最大的数字所在的节点lu,把它提到根节点所在的位置,然后再找到大于r且最小的数字所在的节点rv;把它提到根节点的右儿子所在的位置; 则根节点…
[题目链接]:http://hihocoder.com/problemset/problem/1329 [题意] [题解] 因为一开始是空的树,所以; n其实就代表了树中的最多元素个数; 则最坏的情况就是把所有元素都加进去; 然后再全部都删掉吧; 那也才2*n次操作; 完全可以用set来一个一个删除那个区间的数字; lower_bound是大于等于那个数字的啊.. [Number Of WA] 0 [完整代码] #include <bits/stdc++.h> using namespace…
[题目链接]:http://hihocoder.com/problemset/problem/1476 [题意] [题解] 首先不考虑黑格子,计算出一共有多少个矩形: 枚举矩形的大小r×c,这样大小的矩形一共有(N−r+1)(M−c+1)个. 然后减去不符合要求的矩形,也就是减去包含第一个黑格子的矩形个数,减去包含第二个黑格子,第三个的-- 然后再加上包含第一第二黑格子的矩形数-- 也就是容斥原理. (奇数个黑色格子就减,偶数个就加) 每一项的具体值如下计算:对于这些不能包含的格子,统计最左最右…
[题目链接]:http://hihocoder.com/problemset/problem/1473 [题意] [题解] 假定初始为在在0位置(相对它左边那条线); 则考虑; 多少步之后,人又能这到达相对位置为0的点(相对左边那条线); 应该是L/gcd(L,D)步; 因为D*L/gcd(L,D)是L,D的最小公倍数; 且可以证明 在走的每一步 在0..L上都是均匀的; 即,数轴0..L-1上 把 (k*D)%L记录在这个数轴上(L/GCD(L,D)个点) k代表步数; 第k步就在从左往右数的…
[题目链接]:http://hihocoder.com/problemset/problem/1475 [题意] _< [题解] /* 别人的题解 首先对于每个位置预处理数组的前缀和,即s[i]=a[1]+a[2]+-+a[i]s[i]=a[1]+a[2]+-+a[i]. 然后使用动态规划进行计算,f[i]表示已经对a[1,i]进行拆分,且第i个数是其中最后一段末尾的方案数,初始状态为f[0]=1,目标状态为f[n]. 在计算f[i]时,我们只需要找到所有满足s[i]≠s[j]的0≤j< i,…
[题目链接]:http://hihocoder.com/problemset/problem/1474 [题意] [题解] 题目的意思是说,那个块在最左端先出现,就先处理那个块; 每个连通块,处理出最下的行标和最上的行标,以及最左的列标和最右的列表; 把在这个连通块里面的数字做上标记就好(注意不要输出其他连通块的1) [Number Of WA] 0 [完整代码] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt…
[题目链接]:http://hihocoder.com/problemset/problem/1511 [题意] [题解] 有个方差的公式 V(X)=E(X2)−E(X)2 这里E(X)指的是X的期望; 显然所有树的度数的期望都是2*(n-1)/n 则问题转换成求E(X^2)了; 这里用到了树的prufer数列->关于prufer数列 即每一个prufer数列都对应了不同的树; 然后根据数列中的数字出现的次数和其在树中的度数的关系; 我们可以枚举每一个节点在prufer数列中出现的次数X; 在n…
[题目链接]:http://hihocoder.com/problemset/problem/1499 [题意] [题解] 贪心,模拟; 从左往右对于每一列; 如果上下两个格子; ① 有一个格子超过了所需; 另外一个格子小于所需; 则把超过了的格子转移一些到小于的那个,让上下两个互补; 然后把剩下的往右传(肯定是要往右传的); ② 如果两个格子都超过了所需; 则把两个格子多余的硬币都往右传. ③ 如果两个格子都小于所需; 则两个格子都从右边借一些 [Number Of WA] 1(输入是一列一列…
[题目链接]:http://hihocoder.com/problemset/problem/1032 [题意] [题解] 原文地址:https://segmentfault.com/a/1190000003914228 UPD1 RL[j]的定义是,回文最左或最右端到中心点j的距离 [Number Of WA] 0 [完整代码] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define…
[题目链接]:http://hihocoder.com/problemset/problem/1317 [题意] [题解] dfs就能过吧. 在选取的时候; 把选取的这一行,占据的列,列的权值+1; 按列搜; 在搜第col列的时候,前i-1列保证有且只有一个行占据着 如果选择的某一行,在前col-1列有格子;则不能选它; 否则修改这一列以及这一列后面的列的权值; 在搜某一列的时候,如果发现它的权值为1;则不用搜了; 如果权值大于1,直接返回上层; [Number Of WA] 0 [完整代码]…
[题目链接]:http://hihocoder.com/problemset/problem/1312?sid=1092363 [题意] [题解] 定义一个A*函数 f = step+val 这里的val是当前这个状态;每个点到目标状态的点的曼哈顿距离的绝对值; (这个值肯定比真正需要花费的路程短) step就为当前状态花费的步数; 把普通队列改成优先队列; 优先处理f值小的状态; f值相同的,优先处理step值小的; (也就是说f值大的不是不处理了,而是放到后面再处理) 这样就能较快地逼近目标…
[题目链接]:http://hihocoder.com/problemset/problem/1312?sid=1092352 [题意] [题解] 从末状态的123456780开始逆向搜; 看它能到达哪些状态; 到时候O(1)输出就可以了; 用map< int,int> dic来判重; 对于状态; 用数组表示; 然后把它转化成一个对应的十进制数; [Number Of WA] 0 [完整代码] #include <bits/stdc++.h> using namespace std…
[题目链接]:http://hihocoder.com/problemset/problem/1308 [题意] [题解] 用bfs处理出3个骑士到每个点的最短路; 然后枚举最后3个骑士到了哪一个点. 把3个骑士的最短路加起来取最小值就好; [Number Of WA] 0 [完整代码] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<…
[题目链接]:http://hihocoder.com/problemset/problem/1304 [题意] [题解] 按照题目给的方法搜索就好; 那个方法很棒啊. 注意除0; 然后是浮点数的比较; 直接返回了一个Int型..爆炸了 (((a$b)$c)$d) ((a$b)&(c$d)) $操作对应 1..6 +,-,*,/,反-,反/ [Number Of WA] 6 [完整代码] #include <bits/stdc++.h> using namespace std; #de…
[题目链接]:http://hihocoder.com/problemset/problem/1303 [题意] [题解] /* x % m[1] = r[1] x % m[2] = r[2] x = k[1]*m[1]+r[1] ···① x = k[2]*m[2]+r[2] ···② k[1]*m[1]+r[1]=k[2]*m[2]+r[2] m[1]*k[1]-m[2]*k[2]=r[2]-r[1] 令A=m[1],B=m[2],C=r[2]-r[1],x=k[1],y = -k[2];…
[题目链接]:http://hihocoder.com/problemset/problem/1519?sid=1098756 [题意] Chinese [题解] bfs题; 根据bfs的性质; 第一次到达的点肯定是转弯次数最少的; 每次往一个方向走到头就好了; 搞个数组判判重. 这里在往一个方向走的时候; 如果途中遇到了终点; 也算能到达终点; 其他的就没什么坑点了; [Number Of WA] 3 [完整代码] #include <bits/stdc++.h> using namespa…
[Link]:https://hihocoder.com/problemset/problem/1122 [Description] [Solution] 二分图匹配,匈牙利算法模板题; 这里我先把染成0的放在一个vector里面,然后再进行匈牙利算法. [NumberOf WA] [Reviw] [Code] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,…
[Link]:http://hihocoder.com/problemset/problem/1378 [Description] [Solution] 在求完最小割(最大流)之后; 可以在剩余网络中再从1号点做一次bfs; 往flow[][]为正的边走; 能走到的点就是S集合了; [NumberOf WA] [Reviw] [Code] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #de…
[Link]:http://hihocoder.com/problemset/problem/1369 [Description] [Solution] 最大流模板题 [NumberOf WA] [Reviw] [Code] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long long #define…
[题目链接]:http://hihocoder.com/problemset/problem/1477 [题意] 中文题 [题解] 首先,一年一年地加,把开始的年份和结束的年份之间的年根据是否为闰年; 加上365天的秒和366天的秒; 然后把开始的那一年的剩余天数加完; 再把结束的那一年的1月1号开始一直加到结束的年的月日; 把有闰秒的年月日; 判断一下,在不在两个日期之间; (严格在两个日期之间,不能相等); 我的程序,算的时候,右端点严格会被算到; 在的话,ans++; [Number Of…
题目描述 FST是一名可怜的 OIer,他很强,但是经常 fst,所以 rating 一直低迷. 但是重点在于,他真的很强!他发明了一种奇特的加密方式,这种加密方式只有OIer才能破解. 这种加密方式是这样的:对于一个 01 串,他会构造另一个 01 串,使得原串是在新串中没有出现过的最短的串. 现在 FST 已经加密好了一个串,但是他的加密方式有些 BUG ,导致没出现过的最短的串不止一个,他感觉非常懊恼,所以他希望计算出没出现过的最短的串的长度. 输入格式 一行,一个 01 串. 输出格式…