- 博客(14)
- 收藏
- 关注
原创 hdu 5439 Aggregated Counting
解题思路:找公式,预处理,二分 b[n]中存储i的最后的位置,n在b[]b[ ]中的位置,代表其在f(f(n))f(f(n))中的系数 eg: n=3 f(n)=5, f(f(n))=1+ (2+3)*2 #include<iostream> #include<cstdio> #include<cstring> #include<
2016-08-26 15:46:17
375
原创 hdu 5862 Counting Intersections多校第十场
题意: 给你nn条平行于坐标轴的线段,判断线段之间的交点有多少。无重合线段,任意两条线段之间无相同端点。 官方题解: 由于数据限制,只有竖向与横向的线段才会产生交点,所以先对横向线段按x端点排序,每次加入一个线段,将其对应的yy坐标位置+1,当出现一个竖向线段时,查询它的两个y端点之间的和即为交点个数. 解题思路: 树状数组 首先将这些点离散化,然后处理线段时将点分为三种类型。将横向线段
2016-08-18 23:05:44
240
原创 2016中国大学生程序设计竞赛 - 网络选拔赛 hdu5833 Zhu and 772002
题意: 有n个数,选任意个数,使得乘积为一个完全平方数。 解题思路: 题目保证这n个数的素因数不超过2000,也就是其素数的个数不超过303303,构造一个303∗n303*n的0101矩阵,进行高斯消元 ans=2ans= 2^(n−秩)−1(n-秩) - 1。 矩阵的构造:分解每一个数,统计其素因数出现的次数,奇数个在相应位置记为11,否则记为00。#include<iostream>
2016-08-15 11:52:33
268
原创 2016中国大学生程序设计竞赛 - 网络选拔赛 hdu 5839 Special Tetrahedron
题目大意:空间中有n个点,选出四个点构成一个四面体,四面体满足 1、至少四条边相等 2、如果四条边相等,不相等的两条边不相邻 解题思路: 1)先枚举两个点P1,P2P1,P2。构造一个以这两点为法向量,且经过这条线段中点m1m1的平面。(空间平面方程:平面法向量为 n=(A,B,C)n=(A,B,C),平面方程就为Ax+By+Cz=dAx+By+Cz=d)。 2)判断在此平面中的点,记录下
2016-08-15 11:13:38
280
原创 cf XOR and Favorite Number
现在有一个前缀异或和数组sum[], 现在我们要求区间[l,r]的异或的值, 用sum数组表示就是sum[l-1]^sum[r]==k,或者找区间中满足k^sum[r]==sum[l-1]的个数 异或:l~r之间的异或值为 sum[r]^sum[l-1]#include<iostream> #include<cstdio> #include<algorithm> #in
2016-08-07 17:23:29
276
6
原创 hdu 5806 NanoApe Loves Sequence Ⅱ
题意:求满足第K大的数>=m>=m的区间个数 解题思路:将这N个数>=m>=m的标记为1,#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; typedef long long ll; int cnt[200000+10]; ll
2016-08-06 22:59:26
235
原创 hdu 5125 magic balls
题意: 有N个人,每个人有ai、bi两个球,可以用魔法交换ai和bi,每次交换消耗一点魔力值。现在有m点魔力值,问你最终得到的a的最长上升序列是多少,魔力值不能小于0. 解法: dp[i][j][k]: i:代表当前的位置 j:代表当前取a或是取b (0代表取a,1代表取b) k:当k==0时,代表当前的最长序列,
2016-08-06 15:58:58
205
原创 hdu 5800 To My Girlfriend
∑i=1n∑j=1n∑k=1n∑l=1n∑m=1sf(i,j,k,l,m)(i,j,k,laredifferent) i,j为必选数的序号,k,l为必不选数的序号,m是背包体积。 官方题解: 令dp[i][j][s1][s2]表示前i个物品填了j的体积,有s1个物品选为为必选,s2个物品选为必不选的方案数(0<=s1,s2<=2),则有转移方程dp[i][j][s1][s2] = dp[
2016-08-06 15:40:42
216
原创 hdu 5802 Windows 10
官方题解: 您可能是正版Windows 10的受害者_ 直接贪心就好 比较直观的看法是使劲往下降,然后升回来 或者使劲往下降然后停顿然后再使劲往下降。。。 于是就能将问题变成一个子问题,然后dfs就好 需要注意的是由于按up键也可以打断连续向下的功效 所以应该记录停顿了几次,以后向上的时候用停顿补回来 当p<=q时,直接上升即可 当p>=q时,用down
2016-08-05 11:39:20
403
原创 lower_bound 和 upper_bound
函数lower_bound()在前闭后开区间进行二分查找,返回大于或等于key的第一个元素的位置。若书所有元素都小于val,则返回区间的最后的位置。 函数upper_bound()在前闭后开区间查找key的上界。元素值>key值的第一个元素位置。
2016-07-25 16:30:30
170
原创 多校 1001 Acperience
题意:给一组数W,-10000=0。求 各个 ( wi-@bi)^2 和的最小值解题思路,求这一列数的方差,@取其平均数,当wi要注意,在求方差时不能直接求,中间结果会暴long long,要用S^2=1/n * [ (x1^2+x2^2+x3^2+……)- n*x^2] α #include #include #include #include #include #include
2016-07-21 19:31:14
149
原创 HDU 5057 Argestes and Sequence(树状数组)
题目描述: 给你N个数,有M个查询,每次查询输入一个字符“Q”、“S”,为“Q”时输入四个数,“L”、“R”、“D”、“P”,代表查询这N个数从“L"到”R“之间第D位(从个位数起)为”P“的个数。为”S“时,输入两个数,”X“、”Y“,表示将这N个数中的第”X“个数,改为”Y“。 做题想法: 刚开始的时候开了一个三维 的树状数组,结果MLE了,后来就想到每个数的各个为互不影响,就可以从第一
2016-07-18 15:54:53
462
原创 HDU 4985 Little Pony and Permutation
水题~ 注意:不是按照字典序进行排列输出,只要保证从“1”开始遍历就可以了#include #include #include #include using namespace std; int cnt[100100]; int a[100100]; int b[100100]; int c[100100]; int main() { int n; while(~scanf("%
2016-07-10 09:56:12
193
转载 hdu 4983 Goffi and GCD
参考博客:http://blog.csdn.net/yanghuaqings/article/details/47167875 首先,gcd(n-a,n)=gcd(a,n); 假设 gcd(n-a,n)=x 即存在k1,k2,k1!=k2&&gcd(k1,k2)=1使得 n-a=k1*x,n=k2*x; a=n-k1*x=k2*x-k1*x=(k2-
2016-07-09 11:34:23
223
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人