- 博客(59)
- 资源 (1)
- 收藏
- 关注
原创 线段树+贪心——F-排列计算
题目来源牛客网 “科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 F-排列计算https://ac.nowcoder.com/acm/contest/5477/F题目描述天才程序员菜哭武和石头组队参加一个叫做国际排列计算竞赛 (International Competition of Permutation Calculation, ICPC) 的比赛,这个比赛的规则是这样的:一个选手给出一个长度为 n 的排列,另一个选手给出 m 个询问,每次询问是一个形如 (l, r) 的数对,查询
2020-05-12 10:16:32 302
原创 暴力+辗转相除法——N个数求和
从题目“分子/分母”的输入形式可以看出我们不能采用scanf和cin直接输输入值 而要采用字符输入再转换为数值计算过程中判断好符号 暴力通分直接加减即可防止通分过程超出长整型范围 最好每一步结果都约分我最开始暴力约分来着 发现会超时 就用欧几里得算法了 不麻烦也不会超时输出时注意题目要求的形式 想仔细一点每种条件怎么输出即可
2020-03-24 10:19:56 306
原创 矩阵乘法——P哥破解密码
题目来源洛谷T37388P哥破解密码https://www.luogu.org/problemnew/show/T37388题目背景P哥是一个经常丢密码条的男孩子。在ION 8102赛场上,P哥又弄丢了密码条,笔试满分的他当然知道这可是要扣5分作为惩罚的,于是他开始破解ION Xunil系统的密码。题目描述定义一个串合法,当且仅当串只由A和B构成,且没有连...
2018-08-02 20:12:02 2175
原创 等比数列求和+逆元——算
用一个美丽的高一数学公式 就可以把这个假·O(N*M)的题优化为真·O(N)算法注意:因为所求答案是模意义下的 所以需要一个O(N)的线性推逆元算法
2017-11-09 21:13:19 767
原创 树上距离——联合权值
由于有n个点n-1条边 所以这个无向图可转化为一棵树在树上距离为2的点的位置关系有两种①距离他们的LCA距离均为1② 其中一个点是另一个点的父节点的父节点深搜 统计以每个节点为根节点的子树最浅(除根节点外)两层节点的权值和和最大值即可注:这种方法求出的联权值和是无序点对的 最后答案乘二即可
2017-11-07 11:30:41 441
原创 模拟——校门外的树
bitset记录位置上时是否已经被砍 由于0和l+1位置本来就没有树 初始化为已被砍结构体+排序决定当前要砍的树pos 初始化段数ans=11)如果pos两侧的树都已经被砍 则在砍pos这棵树之前 pos自成一段砍去pos后 段数-- ans--2)如果pos两侧有且只有一棵树已经被砍砍去pos相当于pos两侧没被砍的树所在的树段缩短 段数不变 ans不变3)如果pos两侧没有树已经被砍砍去pos相当于断开pos所在树段 段数++ ans++注:pos两侧=[pos-1]处+[pos+1]处
2017-11-06 16:04:23 405
原创 SPFA——路障Roadblocks
将每条无向边拆成两条有向边 建图分别以1、n为原点SPFA求最短路 分别记为dis1[i]、dis2[i]枚举每一条有向边i(起点为u 终点为v 长度为w)经过该有向边i的最短路长即为 dis1[u]+w+dis2[v]求这些“最短路长”中比“真·最短路”长的最短长度
2017-11-06 08:07:56 286
原创 反向建图+SPFA—— [USACO14OPEN]GPS的决斗Dueling GPS's
1)题目要求判断“边(u,v)”是否“在u到n的最短路径上”,所以①反向建图 将求u到n的最短路径转化为求n到每个点的最短路径②记录路径 可转化为记录在最短路条件下i(1<=i<n)是从哪个点走过来的2)题目中有两个GPS定位系统 分别认定的边权不同 所以一共要做三遍SPFA①求在第一个GPS系统下每个点到n点的最短路及路径②求在第二个GPS系统下每个点到n点的最短路及路径③求答案 由点n走到点1最少受到多少次警告
2017-11-04 19:51:13 271
原创 优先队列——A-B
用两个优先队列(小根堆 相当于将数据从小到大排一遍序)因为差是固定的 随意减数和被减数在两个队列中相对前后顺序是一样的遍历一遍即可
2017-10-24 21:51:04 321
原创 string(strtod)——神秘的杂文
string的stl函数大法好!神奇的strtod函数!!!double k;char str[maxlen],*it;scanf("%s",str);k=strtod(str,&it);k即strtod函数的返回值为一个double类型的实数 为字符串str前缀的实数it为str除去能构成实数k的部分剩下的字符串
2017-10-24 21:40:47 419
原创 string+模拟——小A和小C
模拟第一次询问 查询字符串内是否有“AC” 如果有 删去“AC” 置为“BB”查询是否有“CA” 如果有 符合条件如果第一次询问不符合条件 进行第二次询问查询字符串内是否有“CA” 如果有 删去“CA” 置为“BB”查询是否有“AC” 如果有 符合条件如果两次都不符合条件 输出“NO”否则 输出“YES”
2017-10-20 21:48:12 327
原创 高斯消元——球形空间产生器sphere
设球心在第i维的坐标为ans[1~n]由于是球体 所以所有点到球心的距离都相等所以两点可联立一个关于ans[1~n]的方程再用高斯消元求解即为球心坐标
2017-10-20 21:24:36 227
原创 SPFA——路障Roadblock
建图 求最短路长度len并记录路径 初始化答案为ans枚举最短路路径中的边 把这条边的长度加倍 求此时的最短路长度如果该长度与len的差大于ans 更新ans为该长度-len 还原该边长 继续枚举
2017-10-18 15:26:28 364
原创 ST表——【模板】最近公共祖先(LCA)
我卡常过的QwQ。。。正常写死活过不去 加读入优化也没用。。。后来我把RMQ预处理从它单独的函数里拽出来塞主函数里然后就过了 过了 过了。。。QAQ
2017-10-16 20:44:47 833
原创 SPFA+双向建图——请柬、邮递员送信、银牛派对Silver Cow Party
按照题目所给的边的信息建图做一遍以1为源点的SPFA 求由总部1到各站点的最短路对于[请柬]/[邮递员送信] ans+=∑dis1[i](i=1 to n)反向建图 即把题目描述的边的起始点和目的地颠倒 重新建图在新建的图上再做一遍以1为源点的SPFA求由总部1到各站点的最短路 即在原图上各站点到总部的最短路对于[请柬]/[邮递员送信] ans+=∑dis2[i](i=1 to n)对于[银牛派对] ans=max(dis1[i]+dis2[i])(i=1 to n)
2017-10-14 07:10:18 438
原创 SPFA——玛丽卡
建图 在原图上跑一边SPFA求城市N到城市1的最短路长度ans 记录最短路路径枚举删去最短路路径中一条边的情况 求删去此边后的最短路如果此时的最短路大于ans ans变为此时的最短路长度最后 ans即为所求答案
2017-10-13 21:33:51 211
原创 数论——【模板】线性筛素数
#include <cstdio>#include <bitset>using namespace std;bitset<10000010> g;int n,m,x,p[1000010],top=0;int main(){ scanf("%d%d",&n,&m); g[0]=1; g[1]=1; for(int i=2;i<=n;++i) { if(g[i]==0) p[++top]=i; for(int j=1;j<=top&&p[j]*i<=n;++j) {
2017-10-13 20:51:55 1341
原创 线段树+差分——【模板】树状数组2
按照差分思想 叶节点记录这个数与前一个数的差节点记录左右儿子(l,r)、区间范围(x,y)、区间和(num)查询x时 递归查找1~x区间和即为数列中第x个数的值修改x~y的节点加k时 将第x个点加k、第y+1个点减k(即加-k)即可将第i个点n加v时 对由代表i~i区间的叶节点到根节点的路径上的节点的num进行修改
2017-10-13 19:34:32 440
原创 bitset+暴力——校门外的树(增强版)
bitset大法好!洛谷的数据水我会说吗?!纯模拟就好了:)g[i]记录经过包括挖和种的操作后i位置的状态(是否有树)k[i]记录经过挖操作后i位置的状态g.count()为剩下的包括树苗和原树的树的个数k.count()为剩下的原树的个数g.count()-k.count()即为剩下的树苗的个数如果i位置没有树且正要种树苗 标记i点k[i]为1砍树时 如果当前点i的g[i]为1(有树)且k[i]为1(为树苗)则该点为种上又被砍掉的树苗 记录该点(num[++top]=i)由于num数
2017-10-12 20:36:00 617
原创 暴力+乱搞——最大数maxnumber
top记录当前数列中有多少个数num[i]数组记录i~top中的最大数每次加入num[++top]时将小于num[top]的num[i]值均置为num[top]询问时输出t=num[top-l+1]即可
2017-10-12 20:00:00 397
原创 Tarjan缩点——受欢迎的牛
以奶牛为点、仰慕关系为边建立原图用Tarjan算法求出原图中所有点所属的SCC以刚求出的SCC为点、原图中连接位于不同SCC中的点的边为边建新图如果新图中有且只有一个点无出度 则该点对应原图的SCC中的所有奶牛都是明星奶牛 该SCC所包含的点数即为所求答案否则 原图中无明星奶牛
2017-10-12 16:20:20 193
原创 Tarjan缩点——牛的舞会The Cow Prom
成功跳圆舞的组合数即为以奶牛为点、绳索为边构成的图的包含点数大于1的强连通分量数用Tarjan求每个点所在的强连通分量后统计每个强连通分量所包含的点数统计包含点数大于1的强连通分量数 即为答案
2017-10-12 15:45:26 250
原创 Tarjan缩点+SPFA——缩点
Tarjan+SPFA求DAG上单源最短路模板题用Tarjan在原图上求SCC 缩点用缩点之后的SCC建一个有向无环图SCC权为此SCC内所有点点权和在新建的DAG上将SCC权视为边权跑SPFA求SCC[1]到SCC[n]的最长路即为所求答案
2017-10-12 15:33:15 790
原创 Tarjan缩点+SPFA——正则表达式
Tarjan+SPFA求DAG上单源最短路模板题用Tarjan在原图上求SCC 缩点用缩点之后的SCC建一个有向无环图在新建的DAG上跑SPFA求SCC[1]到SCC[n]的最短路即为所求答案
2017-10-11 21:17:31 187
原创 string+STL——Password
当然是用我万能的string系统函数啦处理两个字符串(原字符串为s)see——s去掉开头和结尾的各一个字符re——s倒序i=s.size()~1循环验证是否有长度为i的子串符合要求如果有 输出该子串并结束程序在循环中暴力比较s的长度为i的前缀是否也是s的后缀如果是 取字符串mos为s的长度为i的前缀在see中寻找mos是否出现过如果出现过 则mos即为所求字符串
2017-10-09 20:55:04 262
原创 KMP(???)——Radio Transmission
设置一个fail[i]数组 记录该字符串与自己匹配时第i位字符能匹配到的最后一位字符的位置(求法同KMP算法中next数组的求法)画图可得结论 最小循环节长度=n-fa[n](n=原字符串长)
2017-10-05 14:42:47 1162
原创 模拟+灌水——填涂颜色
由于方阵中只有一个闭合圈 所以所有不在圈中的空间都可以从方阵外部到达所以可以用从外部模拟灌水的方法 所有可以从外部不能到达的空间即为圈内空间从外部进行深搜 标记可以到达的点(圈外点)为2 则圈边沿仍为1 圈内仍为0输出时 根据题目要求 圈外点为0 圈边沿为1 圈内为0所以输出(2-该点标记)即可
2017-09-30 19:09:46 280
原创 乱搞——均分纸牌
输入后将每堆纸牌的数量减去平均数即为这堆纸牌应被移给或应移给别的堆的纸牌数量若第i堆纸牌数大于0 则第i+1堆纸牌数加上第i堆纸牌数 即将第i堆剩下的纸牌全部移到下一堆 移动次数加一若第i堆纸牌数小于0 则第i+1堆纸牌数加上第i堆纸牌数(绝对值) 即当第i+1~n堆纸牌数均为目标数量后剩下的纸牌全部移到这一堆 移动次数加一若第i堆纸牌数大于0 则第1~i堆纸牌数已均为目标数量即没有纸牌需要通过第i堆牌向左移动
2017-09-28 16:05:34 239
原创 乱搞+暴力+队列优化——B(“1,2,3——4!”)
当高度为x与y(y>=x且y%x==0)同时存在时 以x为当头蚤时可获得的和谐度必然不小于以y为当头蚤时可获得的和谐度(可证,自行想象)将高度由小到大排序 逐个尝试加入队列 若之前加入队列的高度中有当前高度的因数 则当前高度不加入队列中最后只要枚举将在队列中的高度作为当头蚤高度时的情况即可
2017-09-24 14:22:41 350
原创 乱搞——A(跳蚤国垃圾成山辣!)
结构体储存有垃圾的点的位置(x,y)以及从原点走到该点可获得的最大愉悦值(v)未处理该点时 v初始化为该点愉悦值将有垃圾的点以x递增为第一关键字排序设置一个以v递减为第一关键字、以y递增为第二关键字排序的数组 将点逐个加入数组加入点前 从前向后查看已加入数组的点由于点是以x由小到大的顺序加入数组的 所以已加入数组的点的横坐标都符合走到当前点的要求 所以循环向后寻找第一个y<=当前点纵坐标的点 即由该点走到当前点能使当前点获得从原点走到当前点点可获得的最大愉悦值
2017-09-24 13:18:35 1119
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人