自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 CCPC-Wannafly Winter Camp Day2 (Div2, onsite) K Sticks 暴力 折半枚举

题解一共12根木棒如果直接DFS每3根分一组复杂度非常高再乘上6000组样例直接爆炸 先使用DFS枚举状态 每次只枚举一半12根里面选6根另外6根自然也确定了 再从6根里面选3根同理剩下三根自然也会确定 这样复杂度就会将C(12, 6)*C(6, 3)*常数枚举出来的状态前一半处理过程中状态取反已经将后面的包含了 所以只需要用前一半即可AC代码#include <stdio.h&g...

2019-01-30 00:42:47 459

原创 牛客寒假算法基础集训营4 A Applese 的取石子游戏 博弈

题解直接输出"Applese"即可。。 具体怎么证明我也不会 在纸上画画得到的结论AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;int main(){#ifd

2019-01-29 18:23:31 418

原创 CCPC-Wannafly Winter Camp Day4 (Div2, onsite) C 最小边覆盖

题解按照题意尽量的使用最少的边把每个点至少覆盖一次 则如果有一条边两段度数都大于1则这条边可以删去所以只需要检测输入的边两端点度数是否大于1即可AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f...

2019-01-28 23:25:41 163

原创 CCPC-Wannafly Winter Camp Day4 (Div2, onsite) A 夺宝奇兵 思维

题解按照题意从1到n再从n到1且每个点都有两个不能重复经过 (1)表示同编号第一个点(2)第二个点 则ai到ai+1只有两种情况ai(1)~ai+1(1)和ai(2)~ai+1(2) 或者 ai(1)~ai+1(2)和ai(2)~ai+1(1)直接两种情况取min 再加上an(1)到an(2)的距离即可AC代码#include <stdio.h>#include <b...

2019-01-28 23:07:05 195

原创 CCPC-Wannafly Winter Camp Day2 (Div2, onsite) B Erase Numbers I 暴力 贪心

题解如果要删除一个数字肯定是要删除长度最短的 拼接起来的字符串越长才会越大 考虑删除2个数字肯定是要在删除1个的基础上进行所以先删一个再删一个 枚举删哪个然后直接string拼接字符串记录最优答案和要删除的下标 两次O(N^2)暴力即可AC代码#include <stdio.h>#include <bits/stdc++.h>usin

2019-01-28 22:35:36 311

原创 CCPC-Wannafly Winter Camp Day8 (Div2, onsite) G 穗乃果的考试 暴力

题解根据输入nm O(N^2)暴力打出行和列每个位置∑nm的覆盖次数h和l 使用差分+前缀和优化加法接受数据的同时计算答案 如果当前位置为1则加上覆盖次数 即ans += a[i][j]*h[i]*l[j]AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long...

2019-01-27 21:40:01 628

原创 CCPC-Wannafly Winter Camp Day4 (Div2, onsite) G 置置置换 dp

题解令d[i][j]表示长度为i最后一个位置为j的数量 从2开始枚举位置i和结尾 奇数由i-1的小于j的状态转移 偶数由大于j的状态转移大于j的情况下 如果当前选为j之前也会出现过j的情况 可以把那一部分大于等于j的状态都理解为+1后的状态如d[4][2]由d[3][3]的{2, 1, 3}转移来可以看作是{3, 1, 4} 所以转移包含j使用前缀和数组优化加法直接计算 s[i - 1]...

2019-01-26 23:43:34 349

原创 CCPC-Wannafly Winter Camp Day5 (Div2, onsite) J Special Judge 计算几何

题解题意的交点可以理解为两种 1常规相交如X形 2交点不是都是两个线段的端点如T形和…__…下划线表示重叠位置直接套计算几何模版(以下代码使用kuangbin大大的计算几何模版直接复制粘贴五删减篇幅过长233)判断交点是否常规相交 非常规相交判断一个线段的端点在另一个线段上要求这个端点不能等于另一个线段的两个端点AC代码#include <stdio.h>#include ...

2019-01-26 22:19:55 461

原创 CCPC-Wannafly Winter Camp Day7 (Div2, onsite) G 抢红包机器人 暴力

题解数据范围很小 直接N^2暴力即可 接受每个红包抢得顺序 按照题意人不可能比机器人抢得快所以在前面的一定是机器人 后面向前面建一条有向边假设第i个人为机器人 从i点出发DFS统计经过点的数量取min即可(包含未抢红包的是机器人情况)AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std...

2019-01-26 18:11:03 425

原创 CCPC-Wannafly Winter Camp Day7 (Div2, onsite) E 线性探查法 模拟 贪心

题解b数组一定有数值%n==位置的元素 这个是无碰撞直接插入的元素 使用set维护所有当前插入的元素 所有无碰撞的元素直接加入set每次取出数值最小的元素插入 插入后会影响到后面第一个空闲位置 检测他出现的位置和直接取模之间的所有元素是否已经插入 如果是则将他加入set作为备选AC代码#include <stdio.h>#include <bits/stdc++.h&g...

2019-01-26 18:06:35 399

原创 CCPC-Wannafly Winter Camp Day7 (Div2, onsite) A 迷宫 思维

题解题意可以理解为一个点上同时只能存在一个人 只要前面没人挡着每秒所有人都可以向出口移动一个单位考虑两个队的人排队的人合并为一队方式 同一排的人会合并在一起 也就是BFS同层的节点会合并在一起但是每秒也只能移动一个单位 所以即使前面有很大的空位也只能向前走一步不需要真的记录整个队伍 只需要记录队伍的最后一个人的距离就是答案 使用k记录最后一个人即k = max(d, k + 1)如果同层没...

2019-01-26 18:01:14 709 2

原创 CCPC-Wannafly Winter Camp Day1 (Div2, onsite) A 机器人 分类讨论

题解圆圈表示特殊点 X表示必经点 S表示起点左上角图表示找到经过X至少要经过最左最右必经点lr 使用数组排序二分查找题目一共分四种情况(图片参考至某大佬) 代码将12和34合并为两种情况最开始vec数组只保存题目所给特殊点 求出b线路最左最右必经点bl,br 之后加入起点s重新排序求出a最左最右必经点al,ar(情况1)如果b站点没有点直接输出a区间长度(ar-al)*2+s点到ar或...

2019-01-26 11:27:54 632

原创 CCPC-Wannafly Winter Camp Day1 (Div2, onsite) I 起起落落 dp

题解题目可以理解为让你统计持续下降的子序列个数 持续下降子序列可以理解为前三个点的值 左>右>中 再往后平移两个位置依旧满足条件的子序列令d[i]表示以i为结尾的子序列个数 遍历每个位置i 记录可以作为中心点的个数k j从i-2遍历之前处理过的答案如果p[j] < p[i]那么他可以作为i的一个中点k++ 如果p[j] > p[i]那么以j为结尾的子序列都可以接上k和...

2019-01-25 20:26:53 585

原创 CCPC-Wannafly Winter Camp Day1 (Div2, onsite) C 拆拆拆数 数论

题解ab两个数字如果互质直接输出a和b 如果不互质则在10以内暴力就可以得到答案 为什么是这样我也不清楚哈哈 当作一个结论记了AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;l...

2019-01-25 17:38:10 530

原创 CCPC-Wannafly Winter Camp Day1 (Div2, onsite) E 流流流动 树形dp

题解按照题意将节点之间连线后 每个联通块无环但是整体不一定联通 使用并查集将每个集合都跟0号节点连一根线 建立以0为根的树使用树形dp d[i][0/1]表示以i为根的子树i这个节点1选/0不选的最大收益 DFS从0遍历整棵树回溯后计算d如果不选当前节点x则直接加上子节点y选或者不选 即d[x][0] += max(d[y][0], d[y][1])如果选当前节点x从子节点y转移时候 如果...

2019-01-25 17:15:25 412

原创 CCPC-Wannafly Winter Camp Day5 (Div2, onsite) H Nested Tree 树形dp

题解按照题意 将m课树合并为一颗树 题目保证合并后必定为一棵树且端点数量不超过n*m<=1e6 遍历所有节点不会超时使用树形dp d[i]表示以i为根的子树节点数量 使用DFS递归回溯计算d的值 n*m-d[i]表示以d的父节点为根的子节点数量(把树反转过来)则每次把ans加上d[i]*(n*m-d[i])可计算i节点与父节点连接的边对答案的贡献AC代码...

2019-01-24 19:37:28 333

原创 CCPC-Wannafly Winter Camp Day5 (Div2, onsite) F Kropki 状压dp

题解使用状压dp d[i][j][k]表示当前长度为i最后的位置使用j并且已经使用的状态为k的情况下方案数量从前向后推 枚举每个位置 枚举当前位置使用的数字枚举下个位置使用的数字枚举所有状态进行转移 如果满足条件则直接加上当前数量注意2倍关系是双向的AC代码#include <stdio.h>#include <bits/stdc++.h>using name.

2019-01-24 19:36:42 436

原创 CCPC-Wannafly Winter Camp Day5 (Div2, onsite) C Division 贪心

题解每次选取最大的数字进行除2收益最大 使用优先队列存储选取最大值后再加入队列k范围在1e9内 最多1e5个数字 每个值最多1e9所以最多进行nlogv次就能将数值全变为0 当队首为0时推出循环AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ...

2019-01-24 19:30:20 418

原创 CCPC-Wannafly Winter Camp Day5 (Div2, onsite) A Cactus Draw

题解建图后将度最大的节点作为根 行坐标为节点深度 使用l数组记录每行最后一个点的位置每次++xy坐标限制在n范围内即使是一条链也可以满足 兄弟节点在同一行的坐标并依次往后排列 最后按照节点序号输出答案AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long lo.

2019-01-24 19:23:49 384

原创 CCPC-Wannafly Winter Camp Day4 (Div2, onsite) I 咆咆咆哮 贪心 暴力

题解考虑如果选择b肯定是在所有的a使用完毕后再使用数据量1000枚举a的使用量i 计算每个数值选择a比选择b高出的收益然后降序排序并选择前i个答案取max即可AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int IN

2019-01-23 20:32:38 416

原创 CCPC-Wannafly Winter Camp Day2 (Div2, onsite) A Erase Numbers II 暴力

题解本题目是可以使用N^2暴力飘过的 ij枚举两个数字注意题目要求不能改变顺序 使用add函数将两个整数拼接在一起求最大值即可不能使用字符串拼接 使用整数时两个1e9拼接在一起会超过long long范围 使用unsigned long long存储AC代码#include <stdio.h>#include <bits/stdc++.h>using names...

2019-01-21 22:42:00 176

原创 CCPC-Wannafly Winter Camp Day1 (Div2, onsite) J 夺宝奇兵 暴力 贪心

题解考虑枚举一维k 表示先将宝物数量大于k的人手中宝物全部买下 这时所有人的宝物都小于k 只需要将自己手中宝物数量通过购买最便宜的宝物补足k即可AC代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const ll LINF = 0x3f3f3f3f3f3f3f3f;const int ...

2019-01-20 18:09:20 584

原创 CCPC-Wannafly Winter Camp Day1 (Div2, onsite) F 爬爬爬山 dijkstra

题解根据题意 当wls下降一定高度再回到原始高度之后体力值也会回复为原有值可以将题意简化为如果想要登上高度大于h[1]+k高度的山时要将山缩减为h[1]+k的高度按照这个规律建图 将无向边拆分为两条 通往高度大于h[1]+k的山的边代价增加与h[1]+k的高度差和0取max后平方建图完毕后直接跑dijkstra加堆优化即可AC代码#include <stdio.h>#in...

2019-01-20 18:08:24 517

原创 CCPC-Wannafly Winter Camp Day1 (Div2, onsite) B 吃豆豆 dp | 分层BFS

题解将二维平面增加两个维度 一个已经获得的糖豆数量 另一个为当前位置距离下次获得糖豆的剩余时间 进行分层BFSBFS过程中队列节点记录坐标、已获得数量、已用时间 当已用时间%当前位置t[i][j]==0时则获得一个 标记已经走过的不再重复AC代码#include <stdio.h>#include <bits/stdc++.h>usi

2019-01-20 18:07:58 630

原创 Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) D. Recovering BST 区间dp

题解题目大意 给你n个升序排列的数值 让你建立二叉排序树要求连线的节点间gcd>1 问是否能建立成功由于是二叉排序树 中序遍历正好是题目所给的升序排列 所以可以划分为若干区间使用区间dp求解l[i][j]表示区间i到j的元素可以作为节点j+1的左子树 r[i][j]表示区间i到j的元素可以作为节点i-1的右子树状态转移时枚举区间中点从i到j 如果当前中点可以将区间划分为i ~ m-1...

2019-01-19 19:10:07 238

原创 comet OJ 热身赛 K. principal 括号匹配

题解使用栈模拟括号匹配 栈内存储元素的下标 使用b数组记录栈顶下标栈顶下标表示着当前位置栈剩余未匹配的下标 最后对于每个q检测b数组b[r]==b[l-1]如果相等则表示范围内括号被匹配掉AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;...

2019-01-19 15:42:11 459

原创 comet OJ 热身赛 H. checkin

AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;int main(){#ifdef LOCAL //freopen("C:/input.txt", &quo

2019-01-19 15:38:28 530

原创 comet OJ 热身赛 E. dijkstra dijkstra

题解利用距离公式建边跑dijkstra两条线距离c1-c2/sqrt(aa+bb) 线与圆利用点到直线距离-圆半径与0取max 圆到圆直接点距离公式-半径与0取maxAC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int...

2019-01-19 15:37:33 616

原创 comet OJ 热身赛 C. eustia 贪心

题解贪心合并 合并策略每次尽量合并为较大的继续合并先从小到大排序 从第二个开始如果和上一个相比大于m则ans++AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const in...

2019-01-19 15:31:49 752

原创 Educational Codeforces Round 58 (Rated for Div. 2) D. GCD Counting 树形dp 分解质因数

题解题目大意 给你一个n的节点的无向树 每个点都有一个值 问路径上所有节点的gcd>1的最长路径长度考虑2e5内的数字公因数最多7个 2357111317>2e5 素数筛把2e5内所有数字质因子存在vector使用树形dp 自底向上求解 d[i][j]表示使用节点i第j公因子到达叶子的最多顶点 p[i][j]表示使用节点i第j公因子经过i点的最多顶点在DFS回溯后 遍历当前节点...

2019-01-17 18:37:54 198

原创 Computer HDU - 2196 树形dp

题解题目大意 给n个点的无向树 按照编号从2开始分别给出他的父节点和路径长度 输出每个点到其它点的最远距离使用树形dp求解 考虑每个点的最远距离分为两种情况 一种是向父节点走一种是向子节点走d[i]表示第一步向子节点走的最远距离 一旦第一步向子节点走则后面的都要向子节点走否则路径会重复p[i]表示第一步向父节点走的最远距离 d[i]使用DFS自底向上求解类似于计算子树大小p[i]使用DF...

2019-01-17 00:23:02 200

原创 Roads in the North POJ - 2631 树的直径 BFS | 树形dp

题解题目大意 给你n-1条带权边组成一个n个节点的树 题目没给n接收到文件尾 求这个树的直径 树的直径为树中两个距离最远点的距离方法1 两次BFS第一次任找一点为起点进行BFS得到最远的点p 点p一定为直径上的一个端点第二次以p为起点再次BFS得到最远的点q 并求出pq之间的距离即为树的直径AC代码#include <stdio.h>#include <iostre...

2019-01-16 17:06:28 161

原创 Balancing Act POJ - 1655 树形dp 树的重心

题解题目大意 给你一个n的顶点n-1条边的无根树 让你找出树的重心 并求出平衡值树的重心 找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心 平衡值为最大子树节点数量使用树形dp求解 siz[i]表示i的子树的大小 d[i]表示以i为重的平衡值求解过程中任选一点为树根 siz使用DFS回溯求解siz[i] = 1 + ∑siz[子树]在DFS过程中可以同时求出d[...

2019-01-16 15:30:03 373

原创 洛谷 P1352 没有上司的舞会 树形dp

题解树形dp求解 d[i][0]表示i没参加以i为根的子树最大快乐值 d[i][1]表示i参加以i为根的子树最大快乐值如果i不参加则可以从所有子节点j参加或者不参加转移来 即 d[i][0] = a[i] + ∑max(d[i][0], d[i][1])如果i参加则不能从子节点j参加的情况转移来 即d[i][1] = a[i] + ∑d[j][0]求d的过程使用dfs遍历 先递归下去回溯时...

2019-01-16 15:08:39 350

原创 Codeforces Round #532 (Div. 2) C. NN and the Optical Illusion

题解题目大意 一个圆a外面套着一圈b 给你a的半径和b的数量 求b半径如图 设b半径为x = r * sin(α) / (1 - sin(α)) α为红蓝色夹角=360/b数量AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;con...

2019-01-15 10:02:58 543

原创 Codeforces Round #532 (Div. 2) B. Build a Contest

题解题目大意 给你1到n的数字 当已有数字凑齐1到n则输出1否则0 如3 6 1 2 2 3 1 3输出000101使用两个数组 a记录每个数值出现的次数 b数组记录a的出现次数的出现次数 当b的值等于n的时候输出1AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef...

2019-01-15 09:55:50 624

原创 Codeforces Round #532 (Div. 2) A. Roman and Browser

题解题目大意 给你若干1和-1要求删去一些 剩余的和的绝对值最大数据量很小100 枚举每个余数不进行求和暴力求解AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const in...

2019-01-15 09:43:39 308

原创 Educational Codeforces Round 58 (Rated for Div. 2) E. Polycarp's New Job

题解题目大意 +表示增加一个矩形 ?表示查询 设钱包能无限叠加的装正方形问当前大小的钱包是否能把所有矩形装入将所给xy调整为高<宽 记录一个最大的高度 一个最大的宽度 查询时比较高宽即可AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long l...

2019-01-13 15:00:17 285

原创 Educational Codeforces Round 58 (Rated for Div. 2) C. Division and Union 思维

题解题目大意 给你若干个区间 让你分为两个集合 要求两个集合的交集为空按照l排序 记录之前出现过的最大的r 如果当前l没有覆盖着之前的r则从当前位置为分割点 前面为一组后面为一组AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;con...

2019-01-13 14:56:05 572

原创 Educational Codeforces Round 58 (Rated for Div. 2) B. Accordion

题解题目大意 给你一个串让你删除一些字符找到最长的[

2019-01-13 14:53:08 177

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除