取模最短路

5G LDPC编码实战:从校验矩阵到Matlab代码实现(附完整源码) 本文深入解析5G NR标准中的LDPC编码工程实现,聚焦于从3GPP协议中的QC-LDPC校验矩阵到高效Matlab代码的转换。文章详细阐述了基础矩阵(BG1/BG2)选择、提升因子确定以及利用双对角结构的快速编码算法,并提供了完整的、可优化的Matlab源码,旨在帮助通信算法工程师和开发者快速构建5G LDPC编码仿真原型,为硬件实现奠定基础。 阅读详情

hdu 6071
题意:图上有4个点,给定一个k求从2点出发最后回到2这个点且距离不小于k的最短距离。
思路:题目上说的从2出发最后又回到2,所以这是一个回路,而两个回路可以形成一个新的回路,假如现在有两个回路,长度分别为a和b则可以形成新的回路长度a+n*b。题目上让求不小于k的最短路又是回路,所以我们可以找到从2点出发的最小回路将它看做前边提到的b则,我们只需要找到最小的a就可以找到最优解了,而b显而易见的解是min(dis12,dis23)。但是这样找什么时候是终点呢,因为回路是无限的。但是我们可以想到假如前面的a%b的值相同那么上面的解的值就是相同的,所以我们只需要找到%b的非负完全剩余系里面的最小值即可。
比如回到2点的时候有长度为3的和长度为5的两条路径,现在最短的回路长度为2,我们就可以在长度为3的时候再走一遍最短回路形成长度为5的回路,所以只需要记录长度为3就好了。
而我们就可以用最短路来实现,相当于将一个点拆分成了2*b个点,每个代表一个2*b的完全非负剩余系的数。

#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
const int maxn=1e5+10;
const LL inf=1e17+8e16;
int head[maxn],cont,vis[5][maxn];
LL dis[5][maxn],mod;
/*
dis[i][j]数组存的是到达i点且长度对最短回路取余为j的最短回路长度
vis代表的和dis数组一样但是是用来标记这种状态是否在队列中的
*/
struct zp
{
    int u,v,next;
    LL w;
}node[maxn];
void init()
{
    cont=0;
    memset(head,-1,sizeof(head));
    memset(vis,0,sizeof(vis));
}
void add(int u,int v,LL w)//双向边
{
    node[cont].u=u,node[cont].v=v,node[cont].w=w;
    node[cont].next=head[u];
    head[u]=cont++;
    node[cont].u=v,node[cont].v=u,node[cont].w=w;
    node[cont].next=head[v];
    head[v]=cont++;
}
struct edge
{
    int id,dis;
    edge(int _id,int _dis)
    {
        id=_id,dis=_dis;
    }
};
void dij()//最短路算法
{
    queue<edge> q;
    q.push(edge(2,0));
    dis[2][0]=0;
    while(!q.empty())
    {
        int u=q.front().id;
        int num=q.front().dis;
        q.pop();
        vis[u][num]=0;
        for(int i=head[u];i!=-1;i=node[i].next)
        {
            int v=node[i].v;
            LL w=node[i].w;
            int tmp=(dis[u][num]+w)%mod;//到达v点余数为tmp
            if(dis[v][tmp]>dis[u][num]+w)//更新最小值
            {
                dis[v][tmp]=dis[u][num]+w;
                if(!vis[v][tmp])//标记
                {
                    q.push(edge(v,tmp));
                    vis[v][tmp]=1;
                }
            }
        }
    }
}
int main()
{
    int ncase;
    scanf("%d",&ncase);
    while(ncase--)
    {
        init();
        LL k,a,b,c,d;
        scanf("%lld%lld%lld%lld%lld",&k,&a,&b,&c,&d);
        add(1,2,a),add(2,3,b),add(3,4,c),add(4,1,d);
        mod=2*min(a,b);//最短回路
        for(int i=1;i<=4;i++)
            for(int j=0;j<mod;j++)
            dis[i][j]=inf;
        dij();
        LL ans=((k-1)/mod+1)*mod;//直接走最短回路的解
        for(int i=0;i<mod;i++)//枚举余数找最优解
        {
            if(dis[2][i]>=k) ans=min(ans,dis[2][i]);
            else ans=min(ans,((k-dis[2][i]-1)/mod+1)*mod+dis[2][i]);
        }
        printf("%lld\n",ans);
    }
}

bnu oj商品装箱
这里有一个类似的题目和解法
思路:和上一道题同样的思想,这一是一个无限的构造,每个数都可以用无数次,但是对其中某个数a取余确实有限的,只要余数相同就可大的数就可以用最小的数构造出来所以我们可以求出关于一个数的所有余数的最小花费,及到达某个余数构造出来的最小数,这就可以根据余数之间的关系来建立最短路,路上的花费就是这个数,两端的节点就是不同的余数。
这样跑一边最短路就可以知道有哪些余数可以达到,有哪些不可以达到。

#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e6+10;
const int inf=0x3f3f3f3f;
int x[maxn];
struct zp
{
    int u,v,w,Next;
} node[maxn];
int head[maxn],cont;
void init()
{
    memset(head,-1,sizeof(head));
    cont=0;
}
void add(int u,int v,int w)
{
    node[cont].u=u,node[cont].v=v,node[cont].w=w;
    node[cont].Next=head[u];
    head[u]=cont++;
}
int SPFA()
{
    int n=x[0];
    int dis[10010],vis[10010];
    memset(dis,0x3f3f,sizeof(dis));
    memset(vis,0,sizeof(vis));
    queue<int> q;
    q.push(0);
    dis[0]=0;
    vis[0]=1;
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        vis[u]=0;
        for(int i=head[u];i!=-1;i=node[i].Next)
        {
            int v=node[i].v,w=node[i].w;
                if(dis[u]+w<dis[v])
                {
                    dis[v]=dis[u]+w;
                    if(vis[v]==0)
                        q.push(v);
                }
        }
    }
    int Max=-1;
    for(int i=0;i<n;i++)
    Max=max(Max,dis[i]);
    if(Max==0||Max==inf) return -1;//如果有不可达到的余数就不可能有最小值
    else return Max-n+1;//返回最小值,代表最小值后面的都可以被构造出来
}
int solve(int n)
{
    int z=x[0];//选最小的数
    int b[10010],a[10010];
    int tot=0;
    memset(b,0,sizeof(b));
    for(int i=0;i<n;i++)
    {
        int tmp=x[i]%z;
        if(!b[tmp])//将余数不同的记录起来
        {
            a[tot++]=x[i];
            b[tmp]=1;
        }
    }
    for(int i=0;i<z;i++)//建图
    {
        for(int j=0;j<tot;j++)//根据余数之间的关系
        {
            if(i!=(i+a[j])%z)//余数i可以通过+a[j]来到达余数tmp
            {
                int tmp=(i+a[j])%z;
                add(i,tmp,a[j]);
            }
        }
    }
    return SPFA();
}
int main()
{
    int ncase;
    scanf("%d",&ncase);
    while(ncase--)
    {
        init();
        int n;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
            scanf("%d",&x[i]);
        sort(x,x+n);
        if(x[0]==1)
            printf("1\n");
        else
        printf("%d\n",solve(n));
    }
}
告别‘耀斑’降落:手把手教你用PX4+激光测距仪实现固定翼精准自动着陆 本文详细介绍了如何利用PX4飞控与激光测距仪实现固定翼无人机的精准自动着陆,解决传统气压计在低空环境下的测量误差问题。通过硬件选型、安装要点、PX4参数配置及实战调校,帮助开发者实现厘米级高度感知,优化降落曲线,提升着陆稳定性与安全性。 阅读详情

相关推荐

VL53L1X vs VL53L0X:激光测距传感器选型指南与性能对比

本文深入对比了VL53L1X与VL53L0X两款激光测距传感器的核心差异。VL53L1X采用区域ToF原理,在抗环境光干扰、最大测距及多目标识别方面优势显著,尤其适合复杂光线与动态场景。文章结合机器人避障、无人机定高等实战场景,提供了清晰的选型决策树,帮助工程师根据测距需求、环境复杂度与系统成本做出最优选择。

weixin_29197699的博客 393

Codeforces 311C Fetch the Treasure 取模意义下的最短路 (看题解)

Fetch the Treasure 感觉这题很nb啊, 虽然套了一个一点都不有趣的壳子。 我们注意到 k 的值在 1e4以内, 我们用d[ i ] 表示在模 k == i 能达到的最小的值是谁。 用最短路取更新。。 #include<bits/stdc++.h> #define LL long long #define LD long double #de...

287

Netapp FAS2750更换磁盘后不同步问题处理

netapp fas2750磁盘更换后不同步问题处理

jetliu05的博客 1256

洛谷 P2384 最短路 题解

题目链接 比较套路的一道题,本题的方法也可以用来做树的最大乘积独立集 由于本题需要取模,所以不能直接求最短路 我们考虑将每条边取对数,也就是将边权为 www 的边变为 log⁡2w\log_2wlog2​w 这样,根据幂的性质,我们就将乘积最短路转化为了普通最短路,证明显然 最后记得要把边权变回来输出 #include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include

Brian_Pan_的博客 390

手把手教你用CMake和MinGW64编译libuvc:静态链接与动态链接的选择

本文详细指导如何在Windows平台上使用CMake和MinGW64编译libuvc库,并深入探讨静态链接与动态链接的选择策略。通过对比两种链接方式在部署复杂度、内存占用和版本管理等方面的差异,帮助开发者根据项目需求做出最优决策,实现高效的USB摄像头开发。

weixin_29171087的博客 254

病理WSI配准库valis教程

病理WSI配准库valis教程

azrealq的博客 2598

Lazy Running HDU - 6071 最短路+取模

转载自http://blog.youkuaiyun.com/yasola题目大意:给你一个由四个节点组成的环,求从节点2出发,回到节点2的不小于k的最短路。 解题思路:又是一个可能出现无限向下走的题目。面对这种问题有一个比较常见的处理方法就是利用同余。题目要求的是回路,回路有这样一个性质,任意两个回路可以连接构成一个新的回路。于是任意一个回路就可以表示成x+n*y的形式,其中x和y是两个回路。现在再回到利用同余

now_ing的博客 432

“今日头条杯”首届湖北省大学程序设计竞赛 网络赛-E.Jump A Jump(取模最短路)

Problem DescriptionThere's a very popular game called jump a jump recently.In order to get good marks, many people spend a lot of time in this game.Wei is the master of jump a jump,he can easily get a...

WZJRJ28 808

Linux 命令之 locale -- 设置和显示程序运行的语言环境

文章目录命令介绍locale 设置规则使用详解(一)查看当前 locale 设置(二)查看当前系统所有可用 locale(三)设置系统的 locale 命令介绍 locale 是 Linux 系统中多语言环境的设置接口,在 Linux 中,使用 locale 命令来设置和显示程序运行的语言环境,locale 会根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统定义一个软件运行时的语言环境。 通过 locale 来设置程序运行的不同语言环境,locale 由ANSI C提供支持。locale 的

liaowenxiong的博客 3万+

FPGA上跑100G网卡?手把手教你用Xilinx IP核配置RDMA(附避坑指南)

本文详细介绍了如何在Xilinx UltraScale+ FPGA平台上配置100G RDMA网络加速方案,涵盖CMAC和ERNIC IP核的深度配置技巧、硬件架构设计及系统集成。通过实战指南和避坑建议,帮助开发者实现超低延迟、零拷贝的数据传输,显著提升数据中心和高性能计算的网络性能。

weixin_33734785的博客 671

【最短路】洛谷P1144 最短路计数(注意过程取模问题)

题目 LP1144 思路 正常最短路,检测到可以松弛覆盖最短路个数,检测到路径相等最短路个数加上即可。 本题注意过程取模问题,程序过程中就要及时取模,不要到了输出的时候再,不然鬼知道会不会爆。 代码 #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;cstring&gt; #include &lt;algor...

OI - IceCab 354

dToF直方图之美_deadtime死区时间

IMX459的死区时间可以在6ns,这个时间是什么级别,车载激光雷达激光器的光脉宽一般都在4ns以上,也就是这个时间贴近去SPAD的死区时间,这就导致了pile up会非常弱,不会有太多数量的光子计数堆积,加上某些SPAD设计,对TDC有一些更深入的考量,所以不需要去校正pile up算法。Sensor层面决定了pile up的复杂程度,如果一个dToF的SPAD一致性非常好,那么pile up校正可以简单到极致,也就是一句代码的事,比如IMX611,优秀到不需要后端去考虑校正pile up。

dream it possible 1433

2017年多校赛第四场 1005 Lazy Running(同余最短路)

点击打开链接 题意很简单,就是给出一个距离k,你从2开始跑,可以在四条道路上随便跑,最终回到2,问最短距离是多少。 这是一类经典的取模最短路的题目,在叉姐的网站上面就有这种类型题目的介绍,然而当时看不懂叉姐说啥,现在又有这种类型的题目,看了看别人的博客,觉得算是理解了。 我们怎么考虑这个问题呢?首先,我们可以发现,你完全可以直接在1到2或者2到3的道路上来回多次,这样你最终一定可以回到2。我

llzhh的博客 509

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

同余最短路

共有n种糖豆,有k种颜色,第i种糖豆颜色是ki​,重量是mi​,价格ci​。现在要去购买糖豆,购买的糖豆需要包含所有k种颜色,且每种颜色购买的数量相同。问对于在区间0m−1的每个整数r,满足购买的糖豆总重量对m取模为r的购买方案中最小花费是多少?如果不存在满足条件的购买方案,则输出−1。

axibaxhf的博客 1136

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

P2384 最短路

题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你100000000000000000000000000000000000%10金币w 题目描述 给定n个点的带权有向图,求从1到n的路径中边权之积最小的简单路径。 输入输出格式 输入格式: 第一行读入两个整数n,m,表示共n个点m条边。 接下来m行,每行三个正整数...

weixin_30525825的博客 88

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

落谷 P3403 跳楼机(同余最短路)

这道题和裸的同余最短路思路是相同的,对于算法的介绍请转至蒟蒻(我)的另一篇题解: https://blog.youkuaiyun.com/zzk_233/article/details/83419118 但是这道题有一些不同,起点是1,所以跑最短路的时候要把1先推入队列, 而且dis[1]=1,因为虽然他是第一个,但是它要求的大小还是1。 其余还是一样的。 PS:一定要取模!!!最开始的1也要!!这...

zzk_233的博客 350

洛谷P1144 最短路计数 BFS

题意: 给出一个N个顶点M条边的无向无权图,顶点编号为1−N。问从顶点1开始,到其他每个点的最短路有几条,可能有自环与重边。输出答案 mod 100003 后的结果即可。如果无法到达顶点i则输出0。 题解: 用一个cnt数组记录1点到达某个点的最短路径的条数,如果在某个时候已经求出u的深度,如果访问的点是v且v的距深度等于u的路径+1,则可知这条u至v的边是1到v的最短路径,所以cnt[v]...

Aya_Uchida 364

2024.10 29 P1144 最短路计数

给出一个N个顶点M条边的无向无权图,顶点编号为1∼N。问从顶点1开始,到其他每个点的最短路有几条。

SSL_hhw的博客 931

UESTC-1633 去年春恨却来时,落花人独立,微雨燕双飞(取模最短路)

给你一个大小为n的集合S,集合里有n个互不相同正整数.有q个询问,每次询问是否能选择S中的一些数字 ( 同一个数字可以选择多次,也可以任何数字都不选),使它们相加的和为m.Input第一行一个数n(1≤n≤2000),表示集合S的大小.第二行n个数,第i个数ai(1≤ai≤50000)表示集合S中的第i个数.第三行一个数q(1≤q≤10000),表示询问次数.接下来q行,每行一个数m(0≤m≤10...

WZJRJ28 995

Acwing.提高课.最短路计数(c++题解)

给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1 到 N。问从顶点 1 开始,到其他每个点的最短路有几条。

hb_zhyu的博客 667

题解 P2371 【[国家集训队]墨墨的等式】

可以对合法答案按照对 ai​ 取模的结果分类,如 kai​+1 , kai​+2,.....kai​+ai​−1.设 fi​ 表示对 aj​ 取模结果为 kaj​+i 的最小合法解。则对 aj​ 取模为 i 的结果都能统计出来。题目本身是一个完全背包问题,但这么做复杂度太高,至少要带上 r。考虑如果一个数 x 合法,则 x+ai​ 一定合法。但可以发现转移式与最短路的转移很相似,考虑用最短路。最后统计答案(见代码),注意要减掉 l 以前的部分。可以发现我们无法确定转移顺序,下标时大时小。

2503_91954939的博客 235

【洛谷 2384】最短路

题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你100000000000000000000000000000000000%10金币w 题目描述 给定n个点的带权有向图,求从1到n的路径中边权之积最小的简单路径。 输入输出格式 输入格式: 第一行读入两个整数n,m,表示共n个点m条边。 接下来m行,每行...

weixin_30707875的博客 68

P1144 最短路计数

题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N。问从顶点1开始,到其他每个点的最短路有几条。 输入输出格式 输入格式: 第一行包含2个正整数N,M,为图的顶点数与边数。 接下来M行,每行2个正整数x,y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。 输出格式: 共N行,每行一个非负整数,第ii行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出...

qq_38472193的博客 152

打卡信奥刷题(2395)用C++实现信奥 P1144 最短路计数

本文介绍了如何求解无向无权图中从顶点1到其他各顶点的最短路数量。题目要求输出每个顶点的最短路数目模100003的结果,无法到达则输出0。示例中给出了一个5顶点7边的图及其解。 算法使用BFS计算最短路长度,再通过记忆化搜索统计路径数。C++实现采用邻接表存储图,先BFS求最短路,再用DFS动态规划计算路径数目。 数据范围:顶点数N≤10^6,边数M≤2×10^6。适用于大规模图的最短路计数问题。

Loge谈信奥--一个专注于信奥人的博客 379
上一篇: 反素数
下一篇: Miller-Rabin随机性素数测试算法
acmer_zp
博客等级 码龄11年 18粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值