纪中
ssl_yty
这个作者很懒,什么都没留下…
展开
-
【jzoj】 【DP】牛棚
【jzoj】 【DP】牛棚题目解题思路首先两个点之间的间距可以是r也可以是r+1(按文中(s-1)/(n-1)求出来的值设f[i][j]为放置了i头牛,有j个r+1的间距,最小的移动步数假设已经放置了i-1头牛当前的位置是w=(j*(d+1))+((i-j-1)*d)+1,化简为(i-1)*d+j+1那么转移式为f[i][j]=min(f[i-1][j],f[i-1][j-1])+abs(w-a[i])代码#include<algorithm> #include<原创 2021-08-23 15:27:17 · 77 阅读 · 0 评论 -
【gmoj】 【博弈论】stone game
【gmoj】 【博弈论】stone game题目洛谷 P7413解题思路如果开局每一种(石子的个数相同与否看作是否为同一种)堆的个数都为偶数,那一定是后手必胜不管你怎么拿,后手都可以拿和你一样的想让先手必胜,那一定要给后手每一种堆的个数都为偶数,所以要处理个数为奇数的堆进行一次操作会使b[j]-1与b[j-1]+1只有一个奇数堆的话,ans+b[1]两个奇数堆的话,一定得是相邻的,ans+b[j]枚举第一次拿多少个石子处理出每一种堆的个数然后分类讨论代码#include&l原创 2021-08-16 21:55:49 · 111 阅读 · 0 评论 -
【gmoj】【树状数组】【st表】No Time to Dry
【gmoj】【树状数组】【st表】No Time to Dry题目洛谷 P7416解题思路qwq,第一题放紫题,人麻了看到区间想到树状数组 or 线段树手推一下会发现区间[l…r]且s[l]==s[r]时,如果中间有数小于s[l],那么s[r]必须要靠操作一次来涂色那么先预处理出一个bf数组维护当前颜色上一次出现的位置如果当前和上一次之间没有比它们小的,说明涂色可以传递,那就在上一次出现的位置+1加一次操作如果上一次位置不在区间内,是要加1的,如果在区间内不影响结果否则要单独涂一次,原创 2021-08-16 20:43:53 · 85 阅读 · 0 评论 -
【gmoj】【线段数】 【并查集】 graph
【gmoj】【线段数】 【并查集】 graph题目解题思路因为有减边的操作所以我们可以将每条边按存在的时间丢进线段树中维护用按秩并查集维护边二分图如果存在奇环就不成立如果一条边的两端不在同一集合就合并,放进栈中如果在同一集合且是奇环就直接输出NO小小优化,如果当前已经是奇环,那可以不用往下了,输出 l~r 的NO跑完后要弹出栈代码#include<iostream>#include<cstdio>using namespace std;const原创 2021-08-14 17:01:48 · 97 阅读 · 0 评论 -
【gmoj】 【二分】 Acowdemia
【gmoj】 【二分】 Acowdemia题目解题思路二分枚举h查找是否写k篇综述后有>=h篇论文的被引用次数>=h代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;long long n,k,d,l=1,r,a[100010],ans;bool cmp(int l,int y){原创 2021-08-14 16:50:12 · 213 阅读 · 0 评论 -
【gmoj】【暴力】【数学】 Do You Know Your ABCs?
【gmoj】【暴力】【数学】 Do You Know Your ABCs?题目解题思路最多有七个数,分别为A,B,C,A+B,A+C,B+C,A+B+C可发现A+(B+C)=B+(A+C)=C+(A+B)=A+B+C枚举每个数放的位置根据上面的规律求出七个数 必须非负且A<B<C用数组标记去重代码#include<iostream>#include<cstdio>using namespace std;int n,ans,t,f[10],a原创 2021-08-14 16:40:22 · 172 阅读 · 0 评论 -
【gmoj】【树状数组】 United Cows of Farmer John
【gmoj】【树状数组】 United Cows of Farmer John题目解题思路因为领队不能和另一个领队以及队员一样用树状数组维护不同数字的种数加1说明多了一种新的数字假设当前数在之前出现过求i-1~v[a[i]]+1这一段内的不同数字种数即为答案然后消除v[a[i]]这个数字对后面产生的贡献 因为当前数更右加上当前数i的贡献代码#include<iostream>#include<cstdio>using namespace std;in原创 2021-08-14 15:10:56 · 136 阅读 · 0 评论 -
【gmoj】【暴力】 word
【gmoj】【暴力】 word题目解题思路找出长度最短的一个字符串枚举出它所有长度为l的字符串枚举需要修改的位置和修改后的字符判断这个字符串是否符合代码#include<iostream>#include<cstdio>using namespace std;struct lzf{ string s;}f[52];string w,x,y,z;int l,d,n,len[52],ans=0;bool check(string x) //判断是否原创 2021-08-13 19:03:08 · 98 阅读 · 0 评论 -
【gmoj】 【暴力】 【dfs】 Crisis
【gmoj】 【暴力】 【dfs】 Crisis题目解题思路求出这个领导者至少要m个直系下属递申请dfs出它的直系下属想要递申请需要多少个工人按需要的工人数排序累加前m小即为这个领导者想要递申请需要多少个工人解题思路#include<iostream>#include<cstdio>using namespace std;struct lzf{ int to,next;}f[100010];int n,k,x,t,tot,sum[100010],h原创 2021-08-13 18:52:58 · 72 阅读 · 0 评论 -
【gmoj】 【纯模拟】 Brothers
【gmoj】 【纯模拟】 Brothers题目解题思路一个点与向上下左右4个点是相邻如果相邻的点是它的讨厌对象,那个城市变为它的归属处理整一幅图一共处理k次代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;int fx[5]={0,-1,0,1,0},fy[5]={0,0,1,0,-1};int n,r,c,w,z,xx,yy,a[2][110原创 2021-08-13 18:24:32 · 123 阅读 · 0 评论 -
【gmoj】【二叉堆】矩阵
【gmoj】【二叉堆】矩阵题目解题思路20% 直接处理出所有长>=a,宽>=b的矩阵和,取出第k小40%二分第k小的值,判断是否有>=k个矩阵和小于等于100%先将所有长为a,宽为b的矩阵仍进二叉堆,每次取出堆顶,向上或向左扩张,将扩张后的再扔进二叉堆,重复k次为了去重,用map标记代码#include<iostream>#include<cstdio>#include<map>using namespace std;ty原创 2021-08-12 20:26:41 · 197 阅读 · 0 评论 -
【gmoj】 【BFS】 树上摩托
【gmoj】 【BFS】 树上摩托题目解题思路将一棵树分成几颗节点数相等的树那么我们可以先将以每个节点为根的树的节点数求出来 就是有多少个子节点样例中的数树长这样发现,如果想让一颗树分成x棵节点数一样的树,那么它的节点个数一定是x的倍数枚举总节点数n的因数x作为新树的节点个数,那么会有n/x棵数,也就是需要n/k个点为根节点这些节点的子节点个数一定是x的倍数所以就是判断存不存在这样的n/x个点代码#include<iostream>#include<cstr原创 2021-08-12 15:10:50 · 84 阅读 · 0 评论 -
【gmoj】 【并查集】 公路修建问题
【gmoj】 【并查集】 公路修建问题题目解题思路直接跑克鲁斯卡尔绝对会超时利用它的思想用并查集实现先快排一级公路的费用如果路的两端不在一个集合就可以修路再快排二级公路的费用如果路的两端不在一个集合就可以修路代码#include<algorithm>#include<iostream>#include<cstdio>using namespace std;struct lzf{ int x,to,c1,c2;}f[100010];i原创 2021-08-11 22:07:03 · 92 阅读 · 0 评论 -
【gmoj】 【暴搜】 积木
【gmoj】 【暴搜】 积木题目解题思路按照题目暴搜即可正解是状压,但是数据范围小的可以,暴搜也行代码#include<iostream>#include<cstdio>using namespace std;struct lzf{ int d,b,h;}a[20];int n,ans,p[20];void dfs(int x,int l,int r,int sum){ if (sum>ans) ans=sum; if (x>n)原创 2021-08-11 22:01:49 · 213 阅读 · 0 评论 -
【gmoj】【数位DP】 数字
【gmoj】【数位DP】 数字题目解题思路设f[i][j]为填到第i位和为j先处理出f数组最后的答案是*2是因为奇偶位的和一样或前后n位的和一样都可以当奇偶位的和一样且前后n位的和一样时说明前n位偶位的和与后n位奇位的和一样所以要减去代码#include<iostream>#include<cstdio>using namespace std;const int mo=999983;string s;long long n,len,f[101原创 2021-08-10 20:28:11 · 88 阅读 · 0 评论 -
【gomj】【数学】比赛
【gomj】【数学】比赛题目解题思路暴力n2求a中的每一个人和b中每一个人打求a队以及b队能拿到的分a队的分减去b队的除以n因为每一个出现的概率是N分之一pk的两人分值归实力高的人所有那么我们可以维护两种前缀和先排序实力值实力值的平方对于每一个ai找到所有比ta小的bi那么a队得到的分为因为每一个都要除n那么最后除即可求b队得分同理代码#include<algorithm>#include<iostream>#include&原创 2021-08-10 19:53:21 · 113 阅读 · 0 评论 -
【gomj】【LCA】 祖孙询问
【gomj】【LCA】 祖孙询问题目解题思路lca板子题lca是x那么x是y的祖先如果是y那么y是x的祖先不然什么都不是代码#include<iostream>#include<cstdio>using namespace std;struct lzf{ int to,next;}f[80010];int n,m,x,y,t,g,tot;int p[40010],a[40010],dep[40010],log[40010][32],head[40原创 2021-08-10 19:17:59 · 117 阅读 · 0 评论 -
【gmoj】【快速幂】单峰
【gmoj】【快速幂】单峰题目解题思路找呀找规律可以枚举n放在第几位ta前面的数组合数即为将n放在这一位的方案式子长这样长得跟杨辉三角一模一样n特别的大只能用快速幂求代码#include<iostream>#include<cstdio>using namespace std;const long long mo=1000000007; long long n;long long ksm(long long n){ long long w=原创 2021-08-10 19:06:47 · 76 阅读 · 0 评论 -
【gmoj】【二分】平均数
【gmoj】【二分】平均数题目解题思路暴力n2求前缀和后枚举左右边界求平均值即可二分平均值用每个数减去平均值求前缀和枚举右边界 ~~因为子序列大于等于k即可,那么1i-k+1都可做左边界,为了最优肯定拿最小的~如果最后求出来的值>=0说明这个平均值可以求出来代码#include<iostream>#include<cstdio>using namespace std;int n,k,a[300010],sum[300010];double b[3原创 2021-08-09 21:26:58 · 142 阅读 · 0 评论 -
【gmoj】 【tarjan】 【拓扑】 【并查集】 QYQ在艾泽拉斯
【gmoj】 【tarjan】 【拓扑】【并查集】 QYQ在艾泽拉斯题目解题思路因为可能出现环用tarjan缩点再建一个新图用按拓扑序跑一边DP求出一个连通块中从哪个点跑出来的价值最大k次闪现可以看作可以跑k+1个连通块排完序后,取出前k+1大求和即为答案代码#include<algorithm>#include<iostream>#include<cstdio>#include<queue>using namespace原创 2021-08-09 21:20:28 · 109 阅读 · 0 评论 -
【gmoj】 【暴力】 【字符串】 最长公共回文子序列
【gmoj】 【暴力】 【字符串】 最长公共回文子序列题目解题思路m很小可以放肆的搞事情用深搜从b串中找一个回文子序列再判断是否在a中存在保存最长的长度即可代码#include<iostream>#include<cstdio>using namespace std;string s,x,y;int lenx,leny,ans;bool check(int l,int p) //p标记的是回文串的奇偶{ int w=1; for (in原创 2021-08-09 21:09:34 · 137 阅读 · 0 评论 -
【gmoj】 【纯模拟】 好数
【gmoj】 【纯模拟】 好数题目解题思路第一类好数,要不就是全部取第一位,要不就是取第一位+1第二类好数,直接模拟两个数,以及不一样的是哪个位,取最小且大于x的题目#include<iostream>#include<cstdio>using namespace std;long long x,k,y,z,t,a[20];int main(){ scanf("%lld%lld",&x,&k); y=x; z=0; while (原创 2021-07-22 16:58:14 · 369 阅读 · 0 评论 -
【gmoj】 【暴力】 只不过是长的领带
【gmoj】 【暴力】 只不过是长的领带题目解题思路o(n2)的暴力很容易想到枚举取走哪一条然后统计其中最大奇怪度我们将A,B数组都排好序 一开始的匹配如下如果拿掉第三条 匹配会变成这样再推多几个发现拿掉的那条对应的会和下一条匹配那我们事先求出每一条和当前以及下一条的匹配就可以O(n)求得答案代码#include <bits/stdc++.h>#define N 200005using namespace std;int n,x,y,ans[N],M原创 2021-07-22 16:45:10 · 75 阅读 · 0 评论 -
【gmoj】 【kmp】 字符串匹配
【gmoj】 【kmp】 字符串匹配题目解题思路关于忘了kmp怎么打这件事 qwq将Y串复制n遍和X串匹配X作为Y的子串 会出现在两种地方 Y串以内 或 两个Y串之间这种题非kmp莫属啦求一遍Y串内有多少个子串X再将两串接在一起求一次取Y队尾的|X|-1个,对头的|X|-1个,多拿了可能包括了原先在Y串内的子串代码#include<iostream>#include<cstring>#include<cstdio>using namesp原创 2021-07-22 16:14:06 · 98 阅读 · 0 评论 -
【gmoj】 【暴力】 书页
【gmoj】 【暴力】 书页题目解题思路本来已经弃疗了突然觉得可以贪心一波然后发现它竟然是正解-----------------------------------------------------------前言为了让插图页最少 那么肯定要最后一页越前并且文本页之间的相差的越小那么贪心文本页的页码是一段连续的数的和从k+1开始累加 直到再加会超过总页数和 统计加了多少个数,也就是文本页的个数累加和可能会小于总页数和那么还需要加的部分平摊到每一页的页码 每全部多加一次 插图原创 2021-07-22 12:10:46 · 97 阅读 · 0 评论 -
【gomj】【DP】 小学生语文题
【gomj】【DP】 小学生语文题题目解题思路设f[i][j]为第一段的 i~n 能从第二段的 j~n 中匹配出来转移分为三种情况x[i]==y[j] 当前俩字符刚好一样,直接从[i+1][j+1]转移 已经一样 所以不需要操作x[i]能在y[j~n]中找到且没用过 从f[i+1][j]转移 能在之前的匹配段中找到 说明已经用过操作了当前字符不一样 且不能在之前的匹配段找到 说明 j 往前了仍未匹配到x[i] 进行操作 从f[i][j+1]+1转移设g[i][j][0/1]记录从原创 2021-07-22 09:40:59 · 87 阅读 · 0 评论 -
【gmoj】 【DP】 环中环(70)
【gmoj】 【DP】 环中环(70)题目解题思路看到环就先想怎么将ta断成链当ta是链时 能不能取和前面一个判断是否差为1即可而环还要判断一下头和尾的差 可以将它放到统计答案时判设f[i][j]以i为开头j为结尾的环的环,取了f[i][j]个数但是i这一维对后面并没有贡献 将它舍去因为第一重枚举的是开头,没必要记录就变成f[j]以j为结尾的环,取了f[j]个数状态转移 就是枚举一个k 看是否能接在它后面统计答案时 找一个在它前面 且与它差不为1的数个数相减 取最大值 找一个前原创 2021-07-21 21:01:37 · 76 阅读 · 0 评论 -
【gmoj】 【NOIP2013模拟11.7A组】 【DP】【数学】图书馆
【gmoj】 【NOIP2013模拟11.7A组】 【DP】【数学】图书馆题目解题思路雾~ 求分差是什么鬼由初二知识可得方差公式长这个亚子将方差先乘上n 化开 变成这样因为平均数等于ai的和/n 那么 ai的和=n*平均数最后再合并一下就变成了这个亚子s2=∑(a[i])2-(x)2设f[i][j][k]为走了i步到达第j个平台用了k的力气里面存的是(a[i])2代码#include<iostream>#include<cstring>#i原创 2021-07-21 10:26:54 · 81 阅读 · 0 评论 -
【gmoj】 【洛谷 P7404】【差分】有趣的家庭菜园 4
【gmoj】 【洛谷 P7404】【差分】有趣的家庭菜园 4题目解题思路题意就是让前半段草的高度呈上升趋势 后半段呈下降趋势考虑差分出草的高度f[i] 表示以i为k的前半段需浇水量g[i] 表示以i-1为k的后半段需浇水量最后答案取min(f[i],g[i+1])如果当前b[i]为负数 说明它比前一个小 为了满足前半段呈上升趋势 需要浇水 f[i]增加如果当前b[i]为正数 说明它比前一个大 为了满足后半段呈下降趋势 需要浇水 给它前面的浇,为了好统计,就加在它这里 g[i]增加原创 2021-07-21 09:24:24 · 275 阅读 · 0 评论 -
【gmoj】 【结论】 并行博弈
【gmoj】 【结论】 并行博弈题目解题思路每点一次(x,y)(颜色必须为黑),那以(x,y)为右下角的矩形里的棋子颜色都会改变手推一下发现 每一次更改(1,1)都会被改变假设lyp先手时 (1,1)为黑 先把它变成白而ld后手时不管点哪里都会将(1,1)变回黑那 lyp 就永远都能点需要注意的是 有k盘游戏lyp在第一盘是先手 那第二盘就是后手了将k个棋盘(1,1)异或起来就是答案代码#include<iostream>#include<cstdio&g原创 2021-07-21 09:09:24 · 137 阅读 · 1 评论 -
【gmoj】【洛谷 P1879的强化版】 玉米田 (加强版)
【gmoj】【洛谷 P1879的强化版】 玉米田 (加强版)题目解题思路简化版应该都做过吧简化版题解这道题很容易想到状压然后发现数组爆了+TLE在简化版时枚举每一行的状态并存下来其实没有必要当我们要填(i,j)时只有它本身能不能填,(i+j,j)(i , j-1) 这两个格的填法影响它那我们可以将状态的表示变成这个样子接着做的就是正常状压啦不用预处理出状态和不能填的 因为每一行都不一样 做时判断即可代码92 TLE可以开卡常 卡过去#include<iostr原创 2021-07-21 08:02:40 · 88 阅读 · 0 评论 -
【gmoj】【NOIP2013模拟联考11】 【树状数组】 【离散化】矩形
【gmoj】【NOIP2013模拟联考11】 【树状数组】 【离散化】矩形题目解题思路先将点的坐标离散化然后按高低排序先枚举较低的一条横边 选出满足条件的竖边再枚举高的横边 剔除掉不符合条件的满足条件的竖边个数用树状数组维护最后得到满足条件的竖边个数为tot那么ta对答案的贡献为 tot(tot-1)/2代码#include<algorithm>#include<iostream>#include<cstring>#include&原创 2021-07-20 21:13:44 · 82 阅读 · 0 评论 -
【gmoj】【欧拉函数】Gcd会不会
【gmoj】【欧拉函数】Gcd会不会题目解题思路题目十分简单直白就是求1~n内每个数与其他数的最大公因数的和假设一个d能被 i 整除那么它的贡献如下接着将 j/d 那么最大公因数也会 /d,贡献变成这样然后我们想到欧拉函数φ(i)意为1~i中有多少个数与 i 互质那么式子就可以化为为了节省时间我们可以预处理出所有的φ可用线性筛o(n)求不懂的小朋友戳这里接着我们就枚举 i (所求值/因子) j (因子) ij 即为所求值转移式即为 ans[ij]=phi[i]*j最原创 2021-07-20 16:24:28 · 100 阅读 · 0 评论 -
【gmoj】 【2020.06.04省选模拟】 【网络流】 我图呢
【gmoj】 【2020.06.04省选模拟】 【网络流】 我图呢题目解题思路考试的时候只是看懂了要找一个最大独立集咱也不会打此题是建模然后跑一个最大流戳这里是证明因为最大流=最小割就建模有点小难度我们可以将一对互斥的点染成两种不同的颜色分别连上s或t边权则为w[i]+inf 为了保证点数最多啊然后点与点之间的连边 边权为Inf保证不会流完所有流量然后就可以开始快乐的跑最大流啦一开始我们给点染色时标记过颜色也就是分属于s集合或t集合如果跑完最大流后仍在原先集合中说明它被原创 2021-07-20 15:54:20 · 111 阅读 · 0 评论 -
【gmoj】【NOIP2013模拟11.4A组】 【DP】 积木
【gmoj】【NOIP2013模拟11.4A组】 【DP】 积木解题思路考试的时候就很懵-1的积木高度有很多种啊好像模拟不出来事实上,确实如此-1的积木高度有很多种而每一高度都由它前一个+1,-1,或不变的方案和转移过来当然如果它为0,就不存在-1的情况,所以为0时要先处理代码#include<iostream>#include<cstdio>using namespace std;const long long int mo=1000000007;原创 2021-07-17 14:36:57 · 98 阅读 · 0 评论 -
【gmoj】 【扩欧】 鱼跃龙门
【gmoj】 【扩欧】 鱼跃龙门题目解题思路题意就是求1~x的和能整除n高斯求和公式是x(x+1)/2也就是说x(x+1)/2=n移项x(x+1)=2n设ap=x+1,bq=xap-bq=gcd(a,b)要求出最小的bq(x)已知b,就只求出q即可就变成了扩欧里的ax+by=gcd(a,b)求最小的y因为gcd(a,b)=1 说明a,b互质而abp*q=2n说明a,b必包含组成2n的所有因子预处理出小于1e+6的质数将2n分解质因数,组成a,b推导过程咱也不会,背板子原创 2021-07-16 14:46:53 · 179 阅读 · 0 评论 -
【gmoj】【高斯消元】 折射伤害
【gmoj】【高斯消元】 折射伤害题目解题思路题意每当受到伤害时就转移给别人不停的转移暴力纯模拟直到修改的微乎其微根据样例可以知道每人最终受到的伤害由自己原来的和从别人那转移的组成f1=1+½f2f2=0+½f1f3=2组成了多元一次的方程组用高斯消元解决代码#include<iostream>#include<cstdio>#include<cmath> using namespace std;double z,p[220原创 2021-07-15 20:57:07 · 106 阅读 · 0 评论 -
【gmoj】 【DP】 【期望】 彩色圆环
【gmoj】 【DP】 【期望】 彩色圆环题目解题思路暴力必用dfs跑出各种状态再求美观值的期望能跑20分求一个环其实就是一个特殊的链尝试将它断开因为题目求的是一段一段的贡献将这条链变为一段一段来看同一段内颜色相同设f[i][f_len][l_len]表示的是当前段与第一段颜色相同的期望值而g[i][f_len][[l_len]则是不同颜色那么认为f_len是第一段的长度然后l_len是目前最后一段i是当前位置那么可以得出转移式然后我们发现其实可以去除l_len这原创 2021-07-15 19:03:47 · 170 阅读 · 1 评论 -
【gmoj】 【GDKOI2014模拟】 【LCA】树的直径
【gmoj】 【GDKOI2014模拟】 【LCA】树的直径题目解题思路考试时贪心,默认最远距离的两个点的最近祖先是120,emmm…数组开小了,本来能40改正时将所有数据输入,建一颗树输入时维护深度和父节点考虑设两个最远的点为s,t假设现在新增一个点x答案更新由原来的ans,x到t的距离,x到s的距离距离为两个点的深度相加减去2倍最近公共祖先的深度,LCA求祖先同时更新s和t代码#include<iostream>#include<cstdio&原创 2021-07-14 17:12:04 · 116 阅读 · 0 评论 -
[gmoj] [GDOI 2016 Day1] 最长公共子串
[gmoj] [GDOI 2016 Day1] 最长公共子串题目解题思路题意给出k个区间,区间内可任意换位置最大的公共子串最长为多少首先不可能枚举出每种情况再找,太慢了可以想到记录每个区间内每个字母含有多少个匹配时用一个减去一个区间内可以随意换,不需要给出具体换成什么样给出了k个区间如果区间之间有交点那么就可以合并因为你可以将它先换到公共区域,再将它放到另一个区间再将字符串分为一段一段做一遍初始匹配l[i][j]表示第i段从匹配串第j位开始,左边有多少位能匹配r[i]原创 2021-07-13 10:00:06 · 103 阅读 · 0 评论