题目分析
文章平均质量分 54
HT008_123
家人们点点关注叭
展开
-
2022.3.21 训练
A : Glass Carving题目链接题意:给定一个矩形和一些操作 每次横切或者竖切 问你每次切完后的最大矩形题解:我们每次只需要知道横向和竖向最大的间隔是多少就可以了 先用set维护横切和竖切 然后用multiset维护横竖的最大间隔(利用set里的前驱和后继)#include <iostream>#include <cstdio>#include <set>using namespace std;set <int> s1,s2;mul原创 2022-03-21 22:38:10 · 495 阅读 · 0 评论 -
2022.3.20 训练
#605. 蒟蒻题目链接题意:每个元素有价格w和味道t 第一个操作加入一个w,t的元素 第二个操作删除w最小的元素 第三个操作删除t最小的元素 w和t必须一一对应题解:由于一一映射 直接两个map搞就可以了#include <iostream>#include <cstdio>#include <map>using namespace std;int n;map <int,int> s1,s2;int main(){ cin>&g原创 2022-03-20 22:09:30 · 1270 阅读 · 0 评论 -
2022.3.19 训练
A :Subsequence Hate CodeForces - 1363B题目链接题意:可以把0改成1或者把1改成0 让子序列不存在010或者101 最少改变几次?题解:最后的形态一定是0000…11111 11111…0000 11111…1111 0000…0000记录01数量前缀和以及01一共的数量 On枚举即可#include <iostream>#include <algorithm>#include <string>using namespa原创 2022-03-19 22:04:10 · 848 阅读 · 0 评论 -
[NOI 2018]归程
题目描述:n个点,m条边的无向图,每个边有权值和高度。每次询问给出出发点和最低高度,当边的高度高于最低高度时才可以通行,问从出发点可以到达离点1最近的点距离是多少题目分析:由于是无向图,先对点1跑单源最短路。对图做克鲁斯卡尔重构树,由于是高于某个值才能通行,对边权降序排列,做小根堆,对出发的点走到最低不能走的位置,对子树内询问最小的距离即可题目链接:NOI2018 归途AC代码:#include <cstdio>#include <algorithm>#incl原创 2021-12-03 09:32:55 · 292 阅读 · 0 评论 -
[2021ICPC 上海] Life is a Game
题目描述:给出一张无向连通图 有点权 有边权每一次给你一个初始能量和初始点 每到达一个点可以收集点权能量 可以通过一个边的条件是当前能量大于等于边权每个询问是最多收集多少能量题目分析:这类问题肯定是建立克鲁斯卡尔重构树做的对于X点是否能通过就是能量[X的子树和]+初始能量值>=父节点点权变换得 初始能量值>=父节点点权-能量[X的子树和]这个柿子可以通过倍增快速得到答案题目链接:Life is a GameAC代码:#include <iostream>#i原创 2021-11-30 13:00:33 · 603 阅读 · 0 评论 -
[牛客多校] Kuriyama Mirai and Exclusive Or
题目描述:给出一个序列操作 1 对 l - r 内数字异或一个数字操作 2 对 l - r 的数字异或一个等差数列题目分析:操作1维护异或差分即可。操作2考虑单独一个二进制位 维护一个二维差分即可题目链接:Kuriyama Mirai and Exclusive OrAC代码:#include <iostream>#include <cstdio>const int maxm=1e6+100;int val[maxm],a[maxm];bool b[max原创 2021-07-25 17:09:44 · 255 阅读 · 0 评论 -
[2021 HDU多校] HDU 6962 I love tree
题目描述:给定一棵树,然后有两个操作。第一个操作从U,V这个路径上的点权值依次加上路径次序的平方。第二个操作是查询点U的权值和。题目分析:首先可以树剖把路径分为logn段。对于dfn从[h,t]这段,可以维护一个二次函数(x−h)2(x-h)^2(x−h)2展开后得到x2+h2−2∗x∗hx^2+h^2-2*x*hx2+h2−2∗x∗h分别用三个线段树维护每个项的和就可以了时间复杂度O(n(logn)2)O(n(logn)^2)O(n(logn)2)题目链接:HDU 6962AC代码原创 2021-07-23 16:41:16 · 473 阅读 · 2 评论 -
[牛客] 买礼物
看到这题目最简单暴力的做法就是树套树或者带修莫队来做 然而数据范围来了 5e5做不了首先我们定义一个next数组 它的意义为与val[i]相同的数字的下一个位置是那里 每次只要查询l-r区间内next数组的最小值 假如区间最小值也在l-r内说明l-r内最少存在一对相同的数字,对于修改我们建立双向链表对线段树单点修改即可#include <iostream>#include <cstring>const int maxm=1e6+100;int pre[maxm],net.原创 2021-02-06 17:27:07 · 221 阅读 · 0 评论 -
[算法学习] 克鲁斯卡尔重构树
题目1:CodeForces 1417 F Graph and Queries对于一个无向图联通块内找最大值问题可以用并查集dfs序线段树来解决 但是这个题目存在删边操作 那么我们就把删边变为加边 对题目删除的边逆着进行克鲁斯卡尔重构树 即将两个节点的祖节点都连接在一个新点上 这样可以连通块内的点都是这个祖的子树节点 可以使用dfs序来解决#include <iostream>#include <cstdio>const int maxm=1e6+100;struct no原创 2020-10-15 23:19:23 · 290 阅读 · 0 评论 -
[Rocky Mountain Regional Programming Contest 2019] Water Later
题目描述:给你一个字串,你每次可以选择一段连续的相同的字符删去,但是你以但选择了一种类型,你就必须把这个类型的所有区间段都删去,才可以考虑选下一种类型。问最少几步可以清空字串。题目分析:对于字符串中的种类其实是特别少的 那么我们可以枚举状态 1表示在这个状态里这种字符已经全部消去了对于状态i来说 我们可以枚举其中消去的字符j 然后从i状态去除j的状态转移过来 现在的问题就是对于去除了j的状态需要花几次去消出所有的j。我们可以预处理一个cnt[sta][i]数组表示的是在sta这个状态下去除所有的原创 2020-09-19 14:42:00 · 306 阅读 · 0 评论 -
[2019 ICPC Malaysia National] Military Class
题目描述:给出两列士兵 第一行的i可以与第二行的j ( |i-j|<=e ) 配对 其中有k对不能匹配 现在求有多少种完全匹配方案 对1e9+7取模题目分析:看到e<=4也就是说某一个人能跟他匹配的很少 那么就可以用状压来表示第i个第一行的数字可以与其匹配的数字的匹配状态 然后加个记忆化搜索就可以了题目链接:Gym - 102219F代码:#include <cstdio>#include <iostream>#include <cstring&g原创 2020-09-19 13:12:03 · 210 阅读 · 0 评论 -
[HDU 多校训练] 2020 Multi-University Training Contest 2
A题:Total Eclipse题目链接题意:给出N个点M条边的无向图 每个点有权值 每次可以选择一个连通子图把每个点的权值减一,直到所有点的权值都为0,求最少的操作次数。题解:每次肯定是选择一个联通块,然后把最小值变成0,将这个点删去,分裂成多个连通块继续做。倒过来考虑,变成将B从大到小加入这个图加入每个点 x 时遍历与 x 相连的所有边 (x, y),如果 y 在 x 之前加入且 x 和 y 不连通则将 x 和 y 合并,并将 y 所在连通块的树根的父亲设为 x,得到一棵有根树。那么每个点 x原创 2020-07-25 02:13:05 · 236 阅读 · 0 评论 -
[Ecfinal 2019] value
题目描述:给出N个A,B寻找一个集合使价值最大价值即为集合内A的和如果 i,j属于集合内并且 i >1 j>1 i^k=j(k>1) 则价值需要减去j的B值题目分析:每个幂根之间是不会交叉的,我们只需要把每个幂的链挑出来,用二进制去枚举所有的情况即可题目链接:牛客Ac代码:#include <cstdio>#include <iostrea...原创 2020-01-12 19:55:23 · 360 阅读 · 0 评论 -
[Ec Final 2018] Misunderstood … Missing
题目描述:我有两个基本属性一个 A 表示每次攻击可以造成的伤害,D为每轮自动增加的攻击力(A D初始值都为0每轮你有三种操作(任选一个1:造成 A+ai 的伤害2:给 D 增加 Bi 的数值3:给 A 增加 Ci 的数值最后求N轮后,最大的伤害数值题目分析:考虑到2 3 操作有后效性,所有我们倒着DP由于 B操作和C操作与攻击次数和攻击与这个操作的差值有关,所以状态里要有攻击次...原创 2019-12-10 22:58:33 · 185 阅读 · 0 评论 -
[Ec Final 2018] Eventual … Journey
题目描述:又N个车站,M条边,每个车站分为黑白两种如果两个点颜色一样,可以花1的花费到达,或者两个点有边直接连接。问每个点可以到达的点的总花费的最小值题目分析:互相到达的点花费只有三种可能1:互相连接的点或者颜色一样的点2:如果一个点链接着颜色不一样的点,我就可以通过这个点使用2的代价到达所有颜色不一样的点3:如果一个点没有链接颜色不一样的点,去的点(即终点为颜色不一样的点也没有链...原创 2019-12-10 22:44:26 · 399 阅读 · 0 评论 -
[Ec Final 2018] Deja vu of … Go Players
题目:QAQ…题目分析:每次都能拿完一堆,先手的堆数多余后手就输了,否则后手输了题目链接:题目分析AC代码:#include <iostream>#include <cstdio>int n,m;int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&...原创 2019-12-10 22:33:41 · 294 阅读 · 0 评论 -
[ICPC2019 南昌站] Eating Plan
题目描述:有一个N的全排列每个位置数的价值是他的阶乘 mod 998857459现在给出m个询问,每次给出一个数,问最短的子段区间和大于等于这个数的时候,这个最短子段的长度是多少, 不存在请输出 -1 (子段和也要 mod 998857459)题目分析:首先 对于M个询问,值大的子段区间长度一定不小于值小的,即如果我们把M个询问离线,按照值升序排列,最后的答案是一个单调不降序列由于mo...原创 2019-12-08 23:56:34 · 451 阅读 · 0 评论 -
[ICPC2019 南昌站] Bob's Problem
题目描述:有N个点,M条边边有权值和颜色(黑色 白色)最多选K条白边,黑色边数量不限,问在保证选出的边让图联通的情况下,边取值和最大题目分析:由于黑色边没有限制数量我们可以先把所有的黑色边扔进去,做克鲁斯卡尔然后把白边按照权值降序排列第一次我们先尽量保证图联通,因此当边链接的点不在一个连通块的时候取这条边。记录当前用白边的数量然后判断能否用少于等于K让图联通如果白边还有剩余,我...原创 2019-12-08 23:46:09 · 196 阅读 · 0 评论 -
[ICPC2019 南昌站] And and Pair
题目描述:给出一个数字 N (以二进制形式给出)然后寻找数对 (i,j) 满足1:1<=j<=i<=n2:i&n=i3:j&i=0题目分析:首先 第二个条件对于 n 中的二进制0位置i只能取0,1位置 i 可以取 1 或者 0对于 i 的1位置,j只能取 0 ,对于 i 的0位置 j可以取 1 或者 0对于 j<=i这个条件 我们只需要让...原创 2019-12-08 23:40:18 · 270 阅读 · 0 评论 -
[NOIP/CSP 2019 提高组] 括号树
题目描述:QAQ…题目分析:设 dp[i]为1-x内合法的子序列括号树num[i]表示i到根的路径上连续已经匹配的括号串数last[i]表示最后一个为匹配的 ( 位置首先 dp[i] 和 last[i] 都要承接父亲的答案如果 i 为 ( 那么更新 last[i]=i如果 i 为 ) 并且有没有匹配的左括号那么 last[i]=last[fa[last[i]]]num[i]=n...原创 2019-11-28 15:36:55 · 1006 阅读 · 0 评论 -
[NOIP/CSP 2019提高组] 格雷码
题目描述:QAQ…题目分析:我们直接分两个情况讨论,看一个第N个格雷码第K个是从上个格雷码正序+0还是逆序+1来的,然后不停的递归就行了,需要注意的是,我们默认的顺序是顺序,在第二个情况里需要算出这个串在正序里排多少还有就是需要开unsigned long long题目链接:题目链接AC代码:#include <cstdio>#include <iostream...原创 2019-11-27 21:24:21 · 1397 阅读 · 1 评论 -
[蓝桥模拟] 蒜头君王国
题目描述:有N个点,每两个点都有P的概率建边,问最后N个点联通概率题目分析:概率DP。首先 如果只有一个点 Ans=1两个点 Ans=p我们设 F(n) 为 n个点联通的概率 G(n) 为n个点不联通的概率显然 F(n)=1.0-G(n)目前有i个点,枚举j个点为联通的,那么第i个和j-1个点联通概率即为F(j)∗Cj−1i−1F(j)*C_{j-1}^{i-1}F(j)∗Cj−1...原创 2019-11-27 00:32:36 · 196 阅读 · 0 评论 -
[蓝桥杯] 青出于蓝胜于蓝
题目描述:无。题目分析:就是求一个节点子树里有多少个节点编号比这个数小,直接权值线段树动态开点线段树合并就好了。题目链接:题目AC代码:#include <iostream>#include <cstdio>const int maxm=110000;int ans[maxm],root[maxm];int head[maxm],net[maxm*2]...原创 2019-11-26 23:40:41 · 182 阅读 · 0 评论 -
[南昌网络赛] Distance on the tree
题目描述:给出一个 N 节点 的树,N-1个边权每次求 U-V上小于等于K的边权个数题目分析:树上主席树把边权下放到深度比较深的节点转为点权求解的时候由于每个点上维护的是点到父亲的值,所以求解的时候应该是 sum[u]+sum[v]-2*sum[lca]题目链接:Distance on the treeAC代码:#include <iostream>#includ...原创 2019-11-07 22:43:00 · 120 阅读 · 0 评论 -
[SP10628] COT - Count on a tree
题意描述:给出一个N节点的树,每个点有点权M个询问 每次询问 U->V路径上的第k值题目分析:区间第K值主席树。树上主席树维护点权得出的当前答案应该是 sum[u]+sum[v]-sum[lca]-sum[fa[lca]]题目链接:SPOJ 10628AC代码:#include <iostream>#include <cstdio>#includ...原创 2019-11-07 22:38:05 · 129 阅读 · 0 评论 -
[石油大OJ] 腿部挂件
题目描述:给出 N 个数 M个询问每次询问给出 L R X 三个参量询问从L-R中的数字与X最大的异或值是多少题目分析:异或最大值问题应该是用 01 字典树来做然后关于区间直接像主席树那样搞个可持久化就OK了AC代码:#include <cstdio>#include <iostream>#include <algorithm>const ...原创 2019-11-01 19:30:33 · 169 阅读 · 0 评论 -
音乐会的等待
这里是题目 这是暴力枚举方法。scanf("%d",&n);for(i=1;i<=n;i++) scanf("%d",&a[i]);sum=n-1;for(i=1;i<=n-2;i++){ int m=a[i+1]; for(j=i+1;j<=n-1;j++) { if(a[j]>a[i]) break; else if(a原创 2016-12-11 11:41:28 · 631 阅读 · 1 评论 -
混合背包模板
freopen("mix.in","r",stdin);freopen("mix.out","w",stdout);scanf("%d%d",&m,&n);for(i=1;i<=n;i++) scanf("%d%d%d",&w[i],&v[i],&s[i]);for(i=1;i<=n;i++){ if(s[i]==0) { for(j=w[i];j<=m;j+原创 2016-12-14 15:57:30 · 368 阅读 · 0 评论 -
合并石子(区间dp)
{int p,j,i,k,n;scanf("%d",&n);for(i=1;i<=n;i++) { int x; scanf("%d",&x); s[i]+=s[i-1]+x;//前缀和 }memset(f,127,sizeof(f));//找最小值,自然要赋初值为最大的啦for(i=1;i<=n;i++) f[i][i]=0;//初始化for(p=1;p<=n;p++原创 2016-12-18 11:12:56 · 499 阅读 · 0 评论 -
P1049 装箱问题
这是题目 思路一 把质量作为价值,就转化为了01背包#include <cstdio>#include <iostream>using namespace std;int f[10001],w[10001],v[10001];int main(){ int n,m,i,j; scanf("%d%d",&m,&n); for(i=1;i<=n;i++) sc原创 2016-12-21 15:57:21 · 421 阅读 · 0 评论 -
P1164 小A点菜(背包方案数模板)
点菜哈哈哈 题目链接#include <cstdio>using namespace std;int f[20000],a[20000];int main(){ int n,i,m,j; scanf("%d%d",&n,&m); f[0]=1; for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<=n;i+原创 2016-12-21 15:59:20 · 388 阅读 · 0 评论 -
P1531 I Hate It(最简单的线段树)
题目在这呢QAQ 这个垃圾题目我tmd调了一节课#include <cstdio>#include <iostream>#include <string>using namespace std;const int MAXN=200001;int a[MAXN],st[(MAXN)<<2],q[5001];void build(int o,int l,int r){ if(l=原创 2016-12-23 17:04:46 · 397 阅读 · 0 评论 -
算24
题目#include <cstdio>#include <iostream>#include <cstring>#include <math.h>using namespace std;double a[5];bool f[5];const double p=0.000001;bool dfs(int x)//bool型容易判断有无方案{ if(x==4)//第一个数钦定了原创 2017-02-06 09:45:53 · 306 阅读 · 0 评论 -
抓住那头牛
链接#include <cstdio>#include <iostream>using namespace std;int x1,x2,min1=0;struct n{ int pos; int time;}d[200000];int f[200000];int main(){ scanf("%d%d",&x1,&x2); d[1].pos=x1;原创 2017-02-06 11:40:23 · 276 阅读 · 0 评论 -
01迷宫
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <algorithm>using namespace std;int n,m;char map[1002][1002];int dx[5]={0,1,-1,0,0},dy[5]={0,0,0,1,-1};int f[1002原创 2017-02-06 17:11:07 · 468 阅读 · 0 评论 -
数字三角形
题目 分析一下,不难发现,其实这几个数系数是对应行数杨辉三角形的数(又是这破东西!!!)然后判断一下算出来的数比sum大还是小剪一下枝就行了#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;int n,k;int a[1000],yh[1000][1原创 2017-02-07 09:24:09 · 205 阅读 · 0 评论 -
n皇后(位运算版)
其实我也没觉得多快233333333#include <cstdio>#include <iostream>#include <algorithm>#include <queue> using namespace std;int uplimit,sum=0,x=0,n;int a[20];queue <int> que;void print()//输出函数{ for(int原创 2017-02-07 15:08:20 · 296 阅读 · 0 评论 -
乌龟棋
记忆化(330ms)?#include <cstdio>#include <iostream>using namespace std;int s[1000],n,m,ss[6][2],dp[40][40][40][40];int dfs(int i,int s1,int s2,int s3,int s4){ if(i==n) return 0; if(s1!=0)原创 2017-02-08 09:18:03 · 277 阅读 · 0 评论 -
金明的预算方案
题目 分析一下,若想选附件,必然要选其主件,看上去是个依赖背包问题,也就是树形DP,但是这个题目限制了一个问题,也就是一个主件至多有2个附件,那么也就只有4种方案,只选主件,选主件和附件1,选主件和附件2,选主件和附件1和附件2。只有4种方案,所以将其转化成为一个组合背包问题。#include <cstdio>#include <iostream>#include <cstring>usin原创 2017-02-08 11:08:29 · 842 阅读 · 0 评论 -
能量项链
题目 思路跟合并石子一毛一样呢#include <cstdio>#include <iostream>using namespace std;int n;int a[1000],f[1000][1000];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { int x; scanf原创 2017-02-08 15:56:15 · 285 阅读 · 0 评论