ACM-解题报告
文章平均质量分 59
Danliwoo
这个作者很懒,什么都没留下…
展开
-
CF 482 B. Interesting Array 线段树
敲了很久所以mark一下,辣鸡!原题见CF 482B试给出n个数,满足m个条件,每个条件即第l个数到第r个数这连续几个数的&值等于q。n和m范围为1到1051到10^5,q的范围为0到2302^{30}.分析同一个数如果要满足多个条件,则这个数值为q的或。 每次满足的条件要对一个区间的值取或(旧值或新值),对于区间操作,利用线段树来操作。 所有条件标记完以后,更新到所有结点。 再反过来检验是否原创 2016-07-08 10:30:33 · 651 阅读 · 0 评论 -
POJ 3160 Father Christmas flymouse Tarjon+DP
原题见POJ 3160题意:已知一个有向图,每点均有权值。选择一个起点开始遍历,选择它可以经过的一些点,使得点权值之和最大。一个点可以经过多次,但权值只算一遍。权值可以为负。分析权值为负时,直接标记为0,即不会加这个点的权值,但是照样可以经过。强连通分量缩为一点,求出权值之和为该点权值。构造出若干个有向无环图后,从各个入度为0的点开始遍历。把父亲结点累加到该点的值放在一个额外数组c[]上,它不影响该原创 2016-07-07 20:10:53 · 579 阅读 · 0 评论 -
HDU 5768 Lucky7 数论 中国剩余定理
原题见HDU 5768求[l,r]范围内是7的倍数,同时不满足任意一个给定的同余式的数的个数。如范围为[1,100],不满足模3余2或模5余3的7的倍数有7,21,42,49,70,84,91 ,故答案为7. 其中除数都为非7的素数(≤105)(\le 10^5),除数的乘积小于101810^{18}.同余式最多有15个。分析所有[l,r]范围内7的倍数减去满足任意一个同余式的数,即得到了答案。而原创 2016-07-28 19:03:33 · 2562 阅读 · 3 评论 -
HDU 5710 Digit-Sum 数学杂题
原题见HDU 5710题意:定义S(N)S(N)是NN的数位之和,给出一对a,b(0<a,b<101)a,b(0<a,b<101),求是否存在nn满足a×S(n)=b×S(2n)a\times S(n)=b\times S(2n)分析:S(n)与S(2n)S(n)与S(2n)的关系如何?对于n中的任何一个数位x,若x为0-4,则因为没有进位,所以在S(2n)中贡献为2x;若x为5-9,则由于其超过1原创 2016-07-05 17:12:43 · 1859 阅读 · 4 评论 -
CF 429B. Working out DP
原题见CF 429B给一个n*m的方格,A从左上角走到右下角,B从左下角走到右上角,路线交叉处的权值不算,问两条路线权值之和最大值。要求:两条路线只在一点交叉。分析可以枚举交叉点,求该点到四个角落的权值之和。到每个角的权值都可以dp得到最大值。从左上角顺时针得到0,1,2,3四个方向。一开始没注意到题意里的只在一点交叉,妥妥跪了。 CF题解里的图片灰常清晰 两幅图的权值之和分别是: dp[原创 2016-07-26 10:43:04 · 1330 阅读 · 0 评论 -
HDU 5728 PowMod 欧拉函数 递归
感觉智商被掏空…原题见HDU 5728定义k=∑mi=1φ(i·n) mod 1000000007k=\sum_{i=1}^{m} \varphi (i·n)\ mod\ 1000000007 nn是无质因子平方项的数. 求ans=kkkk...k( mod p)ans=k^{k^{k^{k^{...^k}}}}(\ mod \ p),其中k有无穷多个 数据范围:1≤n,m,p≤1071 \l原创 2016-07-22 22:24:05 · 6248 阅读 · 0 评论 -
HDU 5492 Find a path DP —— 2015 ACM-ICPC Asia Regional Hefei Online
原题见HDU 5492给一个N*M的矩阵,从(1,1)到(N,M)经过的格点分值分别为AiA_i,(路径只能向右或向下走,共N+M-1步)。求各种路径中最大的(N+M−1)∑N+M−1i=1(Ai−Aavg)2(N+M−1)\sum_{i=1}^{N+M−1}(A_i−A_{avg})^2.其中Aavg为Ai的均值A_{avg}为A_i的均值 N,M分别为1~30的整数,AiA_i为不超过30的整原创 2016-07-11 09:57:38 · 637 阅读 · 0 评论 -
HDU 5476 Explore Track of Point 2015上海网络赛 几何题
发霉的题解….(自己已经不会证)题目见HDU 5476给出等腰三角形ABC,AB=AC,M为BC中点。P点为三角形内使min{∠MPB+∠APC,∠MPC+∠APB} 最大的点。求P点轨迹。 则容易找到中线AM上的P点都满足使得∠MPB=∠MPC,∠APC=∠APB,则∠MPB+∠APC=∠MPC+∠APB=180° 故轨迹包含中线AM。 并且所有满足的P点都应满足:∠MPB+∠APC=∠MP原创 2016-07-11 09:53:36 · 892 阅读 · 0 评论 -
HDU 5724 Chess 从懵逼到学会 SG函数
引入经典的NIM博弈给若干堆石子,Alice和Bob轮流取石子,每次可选择其中的一堆拿走任意多的石子,但不能不拿。最后没有石子可拿的人输。 已知:堆数N,每堆石子数目aia_i,Alice先取。 求:谁是胜者。博弈基于足够聪明的两者,每次都尽量取到必胜的状态,绝不存在其中一人明明可以胜出却要让别人赢的情况。因此输赢往往由局面本身确定。即存在必胜态、必败态。上面这个游戏的必败态,即玩家面对的是没有原创 2016-07-20 15:26:33 · 1193 阅读 · 0 评论 -
HDU 5833 Zhu and 772002 高斯消元
原题见HDU 5833在nn个数中选择几个数aia_i相乘得到平方数,问有多少种取法。最大的素因子不超过2000,最后答案mod 1000000007。 (1≤n≤300,1≤ai≤1018)(1 \leq n \leq 300, 1 \leq a_i \leq 10^{18})分析所有数的因子不超过2000,则可以打表得到所有可能的因子共pn个。并得到每个因子属于第几个。 对每个数整数分解,原创 2016-08-15 20:57:13 · 853 阅读 · 0 评论 -
HDU 5954 Do not pour out 积分 二分 — 2016ACM-ICPC亚洲区沈阳站
标签: 解题报告 数学原题见HDU 5954高为2,底面圆直径为2的开口杯,平放时里面装有高为d的水。问倾斜到不能再倾斜时(水不能溢出),水的表面积为多少?分析水面有两种可能的形状:椭圆或椭圆的一部分。其临界状况为: 此时椭圆经过杯底与杯口,得到被子恰好倾斜45°,空杯体积和水体积对称相等,故d=1d=1。d>1d>1时为椭圆。(杯子倾斜画得累了,直接让水倾斜吧) 如图水面与杯底倾角原创 2016-11-01 23:51:46 · 4509 阅读 · 4 评论 -
Problem D Curious Cupid from 2016 Asia Hong Kong Online Preliminary 莫队
标签:数据结构 解题报告处理范围处理一类无修改的离线区间询问问题流程已知[L, R]区间内的答案;O(1)内可以得到[L-1, R], [L+1, R], [L, R-1], [L, R+1]区间内的答案;通过从[L, R]到[L’, R’]的曼哈顿路径得到区间[L’, R’]内的答案,复杂度O(|L-L’|+|R-R’|)。对询问区间分块排序后再询问,复杂度O(nn√n\sqrt n)(a原创 2016-10-03 17:14:15 · 1229 阅读 · 0 评论 -
Codeforces 730 J. Bottles DP 0-1背包- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest
标签: 解题报告 DP原题见CF 730有n个瓶子,各有水量和瓶体积。把水从一个瓶倒到另一个瓶。首先要使得最后不空的瓶子数最少,其次要倒水量最少。求瓶子数和倒水量。分析确定瓶子数。 对瓶子的体积排序,前km个瓶子体积V恰好不小于总水量之和wt,则km即为最少的瓶子数。确定倒水量 dp[i][j][k]表示前i个瓶子选取k个(且第i个为所选第k个),使得k个瓶子体积和为j,可以容纳的最大水量。原创 2016-10-24 00:54:06 · 2152 阅读 · 0 评论 -
POJ 3207 Ikki's Story IV - Panda's Trick 强连通分量或并查集+2sat
标签:解题报告 图论原题见POJ 3207有n个点围成一个圈,给出m条可以弯曲的边,使得点两两相连。这些边可以在圆内画,也可以在圆外画。问是否有可以让边不相交的画法。分析每条边都有两种选择,画在内部或者外部。以这两种状态来标记边,共有m对状态,对第i条边,以2i, 2i+1来标记两种状态。而且这种状态必须选一种作为结果。这符合2-sat的说法。判断是否有两条边i,j会相交。若相交,则在图中添加四条有原创 2016-10-12 20:13:41 · 870 阅读 · 0 评论 -
Codeforces 724C Ray Tracing 扩展欧几里得
标签: 解题报告 数学原题见CF 724Cn*m的矩形内有k个点,四周有围墙围起来。从(0,0)45度发射小球,速度为2√\sqrt 2每次遇到墙都正常反弹,直到射到顶点被吸收。问每个点第一次被经过的时刻。分析把矩形对称展开,最后小球在横纵坐标均为maxx=mn/gcd(m,n)maxx=mn/gcd(m,n)处被吸收。 原坐标为(x,y)(x, y)的小球经过轴对称展开,其坐标为(2kn±x,2原创 2016-10-08 23:50:57 · 2701 阅读 · 0 评论 -
NJOJ Hero 状态压缩觉悟题
仅以此题纪念我为数不多的状压DP。题意:有n*n的矩阵,选择其中的n个,使得和最大。且n个中任意两个不得在同行或同列。n<17.定义:逐行选择,并且用一个n位的二进制数表示各列的选择情况。比如00101表示已经选择了两行,第三列、第五列被选择了。 a[i][j]表示第i行、第j列的数值; F[s]表示状态s(用二进制表示)选取的最大值。递推关系:每个二进制状态从前几个相关状态转换而来。比如011原创 2016-03-06 18:09:50 · 785 阅读 · 0 评论 -
HDU 5135 Little Zu Chongzhi's Triangles 状压
原题见HDU 5135给n(n<13)条边,每条边只能用一次,拼成多个三角形,求三角形面积和的最大值。分析1~2122^{12}只有4096,对每个数二进制分解,第i位为1则用aia_i这条边。 预处理出所有的数位和为3的倍数的边。 d[i] i的二进制数位和 f[i] 用了i的二进制所表示的边后,可以组成的三角形面积的最大值。 如果d[i] = d[j]+3且i|j <= i(避免0被1与原创 2016-07-21 22:13:13 · 630 阅读 · 0 评论 -
HDU 5726 GCD 区间gcd查询 MAP RMQ 优化
原题见HDU 5726给N(N≤100000N\le 100000)个数,Q(Q≤100000Q\le 100000)个询问,每次查询输出区间的最大公约数,以及最大公约数为这个数的区间数目。分析查询次数很多,要做预处理,用map<最大公约数,区间数>存下来,实现O(1)的查询。 预处理发现对于同一左端点的区间而言,右端点越靠右,区间gcd单调递减。因此可以固定左端点,二分右端点,找到gcd突变的右原创 2016-07-21 20:26:29 · 1134 阅读 · 0 评论 -
HDU 5528 Count a - b 欧拉函数 素数
原题见HDU 5528题意:f(m)f(m)表示abmodm≠0ab\mod m\neq 0的(a,b)(a,b)的个数,a,ba,b为小于m的非负整数。 G(n)=∑m|nf(m)G(n)=\sum\limits_{m|n}f(m) 给出n(1≤n≤109)n(1 \le n \le 10^9),求G(n)mod264G(n)\mod 2^{64}.分析mod264\mod 2^{64}最后结原创 2016-07-10 14:12:49 · 1216 阅读 · 0 评论 -
2016 计蒜之道 初赛 第三场 百度帐号的选取方案(中等) KMP
原题见计蒜之道(貌似点不进去还是怎样)题意描述如下:记一个字符串最大循环节的个数为p。一个长为N的字符串中取两个不相交的子串,使得两个子串的p相等,问有多少种取法。 三个档次的N分别为50,1000,100000.思路求字符串的循环节,利用KMP算法中的预处理数组next来处理。可自行先A了POJ 2406再继续做。对于最小范围的N来说,O(N4N^4)两两枚举子串后再求p值,复杂度O(N5N^5原创 2016-06-05 20:11:49 · 1663 阅读 · 1 评论 -
Codeforces 586C Gennady the Dentist 模拟
原题见CF 586C听说有人跪了,特来写一发题解。 有n个排队小屁孩看病,各自有三个值v,d,p,分别表示进门后对门外小孩的杀伤力、在门外时的杀伤力、自己的基本分。其中v是一个随着距离增大1而减小作用1的值。 进门了的小孩发挥v的作用,在门外p<0的小孩对后面排队的小孩发挥d的作用。同时p<0的小孩被吓哭都跑了。 现在问的是多少个小孩能顺利进门看病。也就是没有跑路的。模拟一下吓哭和杀伤的过程即原创 2015-10-13 11:06:27 · 1103 阅读 · 0 评论 -
Codeforces 589D Boulevard 线段相交
原题见CF 589D有n个人在x轴上运动,每个人从a点走到b点,出发时间为c,速度为1。其余时间就在x轴上消失。问每个人与另外的多少个人相遇。这个问题可以抽象为几何问题。 首先可以作出时间-位置变化曲线,即线段,且两端点分别为(c, a), (c+fabs(a-b), b)。当两线段相交,即在同时刻同位置出现,算相遇了。附code#include <bits/stdc++.h>#define N原创 2015-10-24 19:55:40 · 742 阅读 · 0 评论 -
Codeforces 584C Marina and Vasya
原题见CF 584C给1~10510^5范围内的整数n,t,满足t<=n.再给两个长为n的字符串,求与前两个字符串不同字符个数为t的一个字符串。范围并不大,可以当作模拟题啊。 先统计字符相同的子串s,长为slen,将其存在一个结构体里。剩下的是不同的子串d1,d2,长为dlen。 可以得到t的范围在dlen+12≤t≤n{dlen+1\over 2}\leq t\leq n 如图,颜色相同的地原创 2015-10-07 22:04:01 · 672 阅读 · 0 评论 -
POJ 1845 Sumdiv 逆元 费马小定理 Trick
原题见POJ 1845给A,B,求ABA^B的所有因子的和模9901。首先把A分解成素数的幂的形式AB=ps1B1ps2B2...pskBkA^B=p_1^{s_1B}p_2^{s_2B}...p_k^{s_kB}再求和sum=ps1B1−1p1−1ps2B2−1p2−1...pskBk−1pk−1sum={p_1^{s_1B}-1\over p_1-1}{p_2^{s_2B}-1\over p_2原创 2015-10-03 13:01:12 · 947 阅读 · 0 评论 -
Codeforces 583C GCD Table 模拟 map
原题见CF 583C对于一个数组a[n],定义一个n*n的gcd矩阵,b[i][j]=gcd(a[i], a[j]).现在乱序给出矩阵内的全部元素,求原数组a[n].如果已知原数组得到gcd矩阵,则可得到对角线上的数字就是原数组里的数。且gcd矩阵有一个性质:一行里的最大值在与对角线的交点上,一列同理。于是可以先找到n*n个数里找到最大值,必定是a[n]里的一个值。 用归纳的办法,已经被挑选的数字原创 2015-10-04 13:43:56 · 924 阅读 · 0 评论 -
POJ 3696 The Luckiest number 欧拉函数 或 BSGS
原题见POJ 3696给一个数L,问至少几个8(如88,8888,88888)可以整数L。若不能,就输出-1.首先把连续的x个8表示成8+8⋅10+8⋅102+...+8⋅10x−1=8(10x−1)10−18+8·10+8·10^2+...+8·10^{x-1}={8(10^x-1)\over 10-1} 若能整除L,则存在y,使得8(10x−1)9=Ly{8(10^x-1)\over 9}=L原创 2015-10-02 23:05:14 · 943 阅读 · 2 评论 -
HDU 5531 Rebuild ——— 2015ACM-ICPC亚洲区长春站
原题见HDU 5531依次输入n个点的坐标,分别为圆心。保证相邻圆心的距离是个正整数。第n个圆和第1个圆相邻。要求相邻两个圆要相切,求全部圆面积和的最小值,以及此时半径的取法。 先根据坐标求出相邻圆心距离依次为a0,a1,...,an−1a_{0},a_{1},...,a_{n-1} 设圆半径分别为x0,x1,...,xn−1x_{0},x_{1},...,x_{n-1} 化为方程,即:⎧⎩⎨原创 2015-11-01 23:09:43 · 2140 阅读 · 0 评论 -
Codeforces 581D Three Logos 模拟 枚举
原题见CF 518D 给出三个矩形的长、宽。问你怎么才能拼成一个完整的正方形。按照输入的先后顺序分别标A,B,C,把这个正方形的边长和形状输出。如果做不到的就输出-1.当时竟然把正方形看成了矩形。莫怪我呀,然后枚举了n多情况写不下去了只好罢手。其实如果是正方形的话,很显然只有这两种形状的正方形: AAAAA BBBBBBAAAAA~~~~~~~~~~~~~~BBBBBB原创 2015-09-29 17:43:02 · 820 阅读 · 0 评论 -
Codeforces 586D Phillip and Trains dfs —— Round #325 (Div. 2)
原题见CF 586D给一个3*n的地图,人s从最左边一列的某个位置出发,每次先向右走一步,再选择上、下、不动。接着连续的字母表示火车,均向左走两步。如此循环,人和火车不能相撞。问人是否能走到地图的最右边。人相对火车的水平距离其实是每次走了三步,火车可以不用动。 只要人走到当前地图的最右边,之后就不会再出现火车,输出YES即可。 所以先扩展一下地图,让之后n+10列均为’.’,然后dfs跑完即可。原创 2015-10-13 11:33:24 · 1238 阅读 · 0 评论 -
ZOJ 3913 Bob wants to pour water —— ZOJ Monthly, October 2015
原题见ZOJ 3913在一个无限高的长方体容器里面倒一定的水,问水面有多高。其中,容器里会有一些小长方体和球体。 给定了长方体的长、宽,障碍物体的个数、位置、大小。所以很快想到,能不能求出给定高度能够倒入水的体积,二分高度逼近答案。已知旋转体的体积公式: V=π∫f(x)2dxV=\pi \int f(x)^2dx对于绕x轴的连续函数f(x)x轴的连续函数f(x)有效。因此写出圆方程(x−r)2原创 2015-10-11 23:40:07 · 744 阅读 · 0 评论 -
POJ 3904 Sky Code 莫比乌斯反演 容斥原理
原题见POJ 3904给n个数,求其中四个数的gcd是1的情况有多少种。从反面考虑,算出gcd不是1的情况,总数取反即是结果。这是容斥原理的思想。当时在做POJ 1091的时候即是这样的想法。画一个vene图,每个集合表示最大公约数为k的情况数。 当k含有素数因子的平方项,如4,12,其实已经被2的情况数覆盖,不必再进行任何处理。只需考虑k是素数的一次方的乘积的情况。当素数个数为奇数个,如2,原创 2015-10-06 18:20:42 · 2225 阅读 · 0 评论 -
PAT 1022 Digital Library MAP(STL)
水题,当作是熟练MAP吧。 map <string, std::vector<int> > mp[N] key: string,各种关键词 value: int,书的序号,这里比较特殊,一个key可以有多个value string book[M]:将书序号和真正的序列号对应起来,注意书序列号排序后输出。 貌似也可以一开始就建立一个map<string, std::vector<string原创 2016-05-23 16:14:30 · 698 阅读 · 0 评论 -
2016百度之星复赛 1003 拍照 扫描线
原题见1004有n条船平行于x轴,已知初始时刻的位置,向平行于x轴正向或反向走。所有船速度大小一致。现在海哥站在x轴上,要给船拍照,角度为朝向+y方向的固定90度,可以在任意时刻、任意位置拍,问何时拍下的完整的船数量最多。 思路对于横坐标为[x, y] 纵坐标为z的船而言,海哥可以移动的区间为[y-z, x+z]且y-z≤\leqx+z。对于同向运动的船,它们在任意时刻的相对位置不发生改变,则可以原创 2016-05-29 17:22:04 · 1647 阅读 · 2 评论 -
POJ 3297 Open Source STL(map+set+pair)
为了熟悉STL,这道题用到的东东还挺多的,存档~ 感谢小灰灰的好东西,囊括了许多STL的基本用法。原题见POJ 3297大写的是项目名,小写的是参与此项目的人名,两者一对多。所以想到了用map<string, set<> >来存。 如果有在多个项目下留名的,则此人无效;若一人在一项目下重复留名,只记一次。人和编号对应起来,用map<string, int>存,另开一个数组,给一个人留的项目计数,原创 2016-05-25 01:03:46 · 1164 阅读 · 0 评论 -
Codeforces 553D Nudist Beach 优先队列 贪心
原题见CF 553D无向图G,n个点,m条边,k个坏点。 在G中选取子图S(可以不连通),S不能包含坏点。对于每个S中的点x,描述强度值I=x的属于S的邻居数/x的所有邻居数。I=x的属于S的邻居数/x的所有邻居数。x的邻居是指和他有直接相连的一条边的点。 现在求一个子图S,使得S中的强度值最小的尽量大。思路先把所有非坏点的选入图S。从中挑出强度值最小的点x移出S。修改和x相邻的点的强度值。原创 2016-04-28 17:54:09 · 1297 阅读 · 0 评论 -
ZOJ 1460 The Partition of a Cake 线段相交
原题见ZOJ 1460(zoj网站经常挂,还是链到NJOJ吧) 一个正方形蛋糕边长为1000,并给了四个点位置固定。 现在上面切n条线,请问可以被切成几块。思路先考虑直线的切割。若在原图中已经有若干条直线,再增加一条直线,和原图有k个交点,则平面块数将增加k+1. 当交点发生重叠时,则应该增加的块数(边长为0的一块东西)不计入。 现考虑在正方形中的切割,则只需在原本增加的块数中减去2块,即向原创 2016-04-03 22:29:35 · 680 阅读 · 0 评论 -
POJ 1703 Find them, Catch them 并查集
原题见POJ 1703N个人,M种输入,要么是声明两者不是同伙,要么是询问两者是否是同伙。思路年幼不懂事,看着紫书上的秩做的,今天重新思考一番,其实原理和积木移动的想法如出一辙。 把人当作积木,可以相互堆叠,a[i]为积木i底下的积木的个数(不严格,也可以是和这个数同奇偶的数字,在每次get累加路径上所有的a才能得到),p[i]为这堆积木最低端的积木编号。初始a[i]=0,p[i]=i. 声明操原创 2016-04-03 01:38:17 · 645 阅读 · 0 评论 -
爱奇艺2018秋季校招算法工程师(第二场)编程题题解
第一题题意一堆石子共N颗,两人(niu和yang)轮流取石子,规则是每次取4i(i为非负整数)4^i(i为非负整数)颗,直到轮到的人不能取则为输。两个人都是聪明人。给出N,求赢家名字。思路明显是博弈题,SG函数解决,先打表找规律。b[i] 用来实现mex函数的辅助数组 sg[i] i的sg值 dp[i] 4i4^ifor(int x = 1;x < 1000;x++) { memset(原创 2017-10-14 22:12:54 · 1716 阅读 · 0 评论