ACM水题
0ng
某跳动厂农民工
展开
-
A - Axis of Symmetry 2019-2020 ICPC Asia Hong Kong Regional Contest
看着没人发代码,我扔下我的吧我的思路大概就是用一个大的矩形把所有的矩形的围住,然后用四条对称轴去切,判断一个点与对称轴对称的点是否也存在,不存在则不能通过这条对称轴切红色的为对称轴#include<bits/stdc++.h>using namespace std;#define rep(i, a, b) for(int i=(int)(a);i<=(int)(b);i++)const long long MOD = 1e9 + 7;const int MAXN = 5e5原创 2021-03-27 21:15:00 · 211 阅读 · 0 评论 -
E. Cheap Dinner (multiset 有手就行)
题意给定 n1n_1n1 种第一道菜的价格 aia_iai,n2n_2n2 种第二道菜的价格 bib_ibi,n3n_3n3种饮料的价格 cic_ici,n4n_4n4 种甜点的价格 did_idi有 m1m_1m1 种组合 (xi,yi)(x_i,y_i)(xi,yi), 描述编号为 xix_ixi 的第一道菜与编号为 yiy_iyi 的第二道菜不能搭配有 m2m_2m2 种组合 (xi,yi)(x_i,y_i)(xi,yi), 描述编号为 xix_ixi 的第二.原创 2021-03-04 11:55:24 · 273 阅读 · 1 评论 -
bzoj3533【SDOI2014】向量集 (线段树 凸包 三分)
有一个结论:答案一定会出现在凸包上,而且如果y>0则在上凸包上,否则在下凸包上。简单证明:要计算一个向量a和一些向量的点积的最大值。因为所有向量都是共起点的,所以只要找到这些向量终点中在向量a的方向最靠前的,而这个最靠前点一定在凸包上。然后在一个凸包上答案是单峰的,可以用三分来做。于是问题就变成了如何动态维护区间的凸包,这个可以用线段树。可是问题在于每次新加一个点会修改logn段区间,而凸包合并是O(n),显然这个复杂度不能接受。有一个比较巧妙的解决方法,包含未插入位置的线段树节点一定不会.原创 2021-01-22 16:24:13 · 174 阅读 · 0 评论 -
bzoj2300【HAOI2011】防线修建 (动态凸包 平衡树 set)
凸包上删点我不会,那就将删点转成加点。所以我们只要维护一个可以加点的动态凸包就好了。每次加点先判断是否在凸包内,然后用set lowerbound找两边相邻的点,对两边分别进行维护。#include <bits/stdc++.h>#define pb push_back#define memarray(array,val) memset(array,val,sizeof(array))using namespace std;const int mod=1e9+7;const do原创 2021-01-20 17:47:44 · 101 阅读 · 0 评论 -
2020秦皇岛CCPC 7-2 Bounding Wall(线段树)
维护每个点最左边/右边/上边的’.'位置每次查询建立线段树然后枚举高度查找两边长度即可#include<bits/stdc++.h>using namespace std;#define memarray(a,b) memset(a,b,sizeof(a))#define pb push_backconst long long mod=1e9+7;const int MAXN=1e3+10;const int N=3e2+10;const int INF=0x3f;int n原创 2020-10-24 01:28:57 · 187 阅读 · 0 评论 -
2019 ICPC 上海 F 题 A Simple Problem On A Tree(树链剖分+线段树 毒瘤题)
A Simple Problem On A Tree令我不解的是在我build()建树的时候long long w=W[pos[l]];如果改成int w=W[pos[l]];就只能正确8.33%,可他一开始W的数据范围不应该爆int的呀不解#include<bits/stdc++.h>using namespace std;#define memarray(a,b) memset(a,b,sizeof(a))#define pb push_backconst lo原创 2020-09-30 19:46:36 · 164 阅读 · 0 评论 -
P4092 [HEOI2016/TJOI2016]树(树链剖分)
P4092 [HEOI2016/TJOI2016]树树链剖分+线段树#include<bits/stdc++.h>//#define int long long#define pb push_back#define memarray(array, value) memset(array, value, sizeof(array))using namespace std;const double EPS=1e-5;const double PI=acos(-1);const lo原创 2020-09-15 19:13:55 · 143 阅读 · 0 评论 -
P3629 [APIO2010]巡逻(树的直径 树形dp)
当k=1时答案就是树的直径头尾相连当k=2时答案就是把树的直径上的点标记起来并将相邻的两个直径上的点的距离标记为-1,再用树形dp找树的直径#include<bits/stdc++.h>//#define int long long#define memarray(array, value) memset(array, value, sizeof(array))using namespace std;const double EPS=1e-5;const double PI=aco原创 2020-08-21 15:52:33 · 169 阅读 · 0 评论 -
1388C - Uncle Bogdan and Country Happiness(假装拓扑排序)
题意:起初所有人都在1号城市,总共有m个人,每个城市有pi个人,每个城市都有一个幸福指数:快乐的人减去不快乐的人。给出n-1条路:u,v,代表城市u和城市v有一条双向边,每个人回到自己的城市是走最短路,也就是不会经过一个节点两遍,每个人在路途中可能变得不快乐,以后的路不能变得快乐,问给出的数据能不能满足每个城市的幸福指数。思路:我们可以从叶子节点下手,比如现在有一个3号叶子节点,p[3]即该城市人数,因为它是叶子节点,所以也就只有p[3]个人经过,然后我们就可以通过p[3]和h[3]来计算开心人数和不.原创 2020-08-01 00:27:24 · 322 阅读 · 0 评论 -
2020牛客暑期多校训练营(第二场)[G] Greater and Greater
题意:给定nnn个数的数组AAA,mmm个数的数组BBB,问在AAA中有多少个长度为mmm的子数组SSS满足Si>=Bi,(i=1,...,m)S_i>=B_i,(i=1,...,m)Si>=Bi,(i=1,...,m)题解:我们可以考虑记录合法子数组以数组A中的一个位置代表一个合法子数组(因为长度固定为m); 设bitset 的ans和tmp,其中tmp为1的位置表示,对于当前的bi ,a数组中有哪些比b[i].val大; 如果某个位置x比当前的b[i].val.原创 2020-07-27 22:18:10 · 151 阅读 · 0 评论