[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6127 [Description] 平面上有n个点,每个点有一个价值,每两个点之间都有一条线段,定义线段的值为两个点价值的乘积,现在让你找一条过原点的直线(直线不经过任何一个节点),将这条直线所经过的所有线段的值求和,问最大的和是多少. [Solution] 假设有一条线把x轴上方和x轴下方的点分开了; 这样这条线的答案就为(val上1+val上2+-+val上n)*(val下1+val下2+-+…
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6053 [Description] 给你一个b数组,让你求一个a数组: 要求,该数组的每一位都小于等于b数组: 且这个b数组的n个数的gcd>=2 [Solution] 设f[i]表示gcd为i的a数组有多少个; 则从gcd大的开始,往gcd小的方向枚举gcd为i; 然后a的每个位置都可以为i的倍数; 则f[i] = a[1]/i * a[2] / i * a[3]/i - a[4]/i; 但是这…
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6047 [Description] 给你一个数列a和一个数列b; 只告诉你a的前n项各是什么; 然后让你求第出a的第n+1..2*n项; 这里a的第i项等于max(a[j]-j)这里j∈[b[k]..i-1]; (i>n) 且,每个b只能用来推一次a. 让你求出∑2∗nn+1ai的最大值 [Solution] 一开始的a数组,对于ai也直接减去i就好; 这样在推的时候,直接取区间的最值就可以了,省…
[Link]: [Description] 给你n个点整数点; 问你这n个点,能够组成多少个正多边形 [Solution] 整点只能构成正四边形. 则先把所有的边预处理出来; 枚举每某两条边为对角线的情况; 看看这两条对角线能否组成一个正方形; 可以的话,递增答案. [NumberOf WA] 1 [Reviw] (排序的时候边的数目和点的弄混了) [Code] #include <bits/stdc++.h> #define int long long using namespace std…
[Link]: [Description] 两个人都做了完全一样的n道选择题,每道题都只有'A','B','C' 三个选项,,每道题答对的话得1分,答错不得分也不扣分,告诉你两个人全部n道题各自选的是什么,问你第一个人得X分,第二个人得Y分可不可能? [Solution] 我们可以倒着想这个问题; 第一个人答对一题,就让X减去1 第二个人答对一题,就让Y减去1 只要能让X和Y都变成0,那就可以了,因为剩余的题目,不管两个人答案 是什么,都可以让他们俩都错. 设xt,bxt是两人所有的题答案相同和…
[Link]: [Description] [Solution] 把所有人的能力从大到小排; 能力最大的肯定可能拿冠军; 然后一个一个地往后扫描; 一旦出现a[i-1]-a[i]>k; 则说明从这以后的人,都不可能再和有实力拿冠军的人竞争了 无论怎么安排都赢不了那部分可能拿冠军的人. [NumberOf WA] [Reviw] [Code] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1…
[Link]: [Description] 给你a数组的n个数的所有2^n个子集的2^n个子集元素的和; 子集元素的和最大为m; 告诉你各个子集元素的和出现的次数; 如 1 2 则0出现1次,1出现1次,2出现一次,3出现一次; 分别对应{},{1},{2},{1,2}; 问你能不能复原出原数组; 输出最小字典序的数组; [Solution] 给你一个b数组; 实际上和背包方案数问题的f数组是一样的; f[i]表示物品组成的体积为i时的方案数 for (int i = 1;i <= n;i++)…
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6090 [Description] 给你n个点; 让你在这n个点上最多连m条无向边; 使得 ∑ni=1∑nj=1dis(i,j)最小 这里dis(i,j)定义为点i到点j的最短距离; (距离定义为走过的边数目); [Solution] 如果还没有组成一棵树的话; 就尽量弄成菊花图; ↓ 这样加入一个点的时候,和所有的在这个连通块里面的点最远距离只为2; 然后,当边的个数大于n-1,也就是说,已经够…
[Link]: [Description] [Solution] 把每个数字长什么样存到数组里就好;傻逼题. (直接输入每一行是什么样子更快,不要一个字符一个字符地输入) [NumberOf WA] 1 [Reviw] [Code] #include <bits/stdc++.h> using namespace std; int T; char s[10][30]; char temp[10][10][7]; int get_ans(int x1,int y1,int x2,int y2){…
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6069 [Description] 定义d(i)为数字i的因子个数; 求∑rld(ik) 其中l,r<=1012且r−l<=106 [Solution] 如果把一个数x质因数分解成p1a1∗p2a2∗...∗pnan 的形式; 可知数字x的因子个数为 (a1+1)∗(a2+1)∗...∗(an+1) 因为i还有k次方; 所以答案就是 (a1∗k+1)∗(a2∗k+1)∗...∗(an∗k+1)…