2.11

一、wander(梦游)
题目求的是1到n的最短路径,为单元最短路径,故不可用多元最短路径的弗洛伊德算法。最开始想的是弗洛伊德,因为是直接从1到n,故可以简化为两层循环。但是时间应该可以,空间直接爆了。所以正解为spfa算法。
这里贴一个标准SPFA,方便以后复习。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;

struct Vtx {
    Vtx *Next;
    int To;
    long long Wgt;

    Vtx(void) : Next(NULL) {}
    Vtx(int To, long long Wgt) : 
        To(To), Wgt(Wgt), Next(NULL) {}
};

struct VtxHead : Vtx {
    Vtx *Head;
    long long Dist;

    void Grow(int To, long long Wgt)
    {
        if (Head) Next = 
            Next->Next = new Vtx(To, Wgt); 
        else Head = 
            Next = new Vtx(To, Wgt);
    }

    VtxHead(void) : 
        Dist(LLONG_MAX), Head(NULL) {}
} G[MAXN], AntiG[MAXN];

struct Unit {
    int u;
    long long Dist;

    bool operator < (const Unit &x) const
    {
        return Dist > x.Dist;
    }
};

inline void Search(VtxHead *Graph, int Source)
{
    priority_queue<Unit> Travel;
    Travel.push( (Unit) { Source, 0 } );
    Graph[Source].Dist = 0;

    while (!Travel.empty()) {
        int From = Travel.top().u;
        long long CrtDist = Travel.top().Dist;
        Travel.pop();

        for (register Vtx *i = Graph[From].Head;
            i; i = i->Next)
            if (Graph[From].Dist + i->Wgt <
                Graph[i->To].Dist) {
                Graph[i->To].Dist =
                    Graph[From].Dist + i->Wgt;

                Travel.push( 
                    (Unit) { i->To, Graph[i->To].Dist } );  
            } 
    } 
}

int main(void)
{
    int n, m;
    scanf("%d %d", &n, &m);

    while (m--) {
        int u, v;
        long long Wgt;
        scanf("%d %d %lld", &u, &v, &Wgt);

        G[u].Grow(v, Wgt);
        AntiG[v].Grow(u, Wgt);
    }

    Search(G, 1);
    Search(AntiG, n);

    printf("%lld\n", G[n].Dist);

    long long MinDist = G[n].Dist;

    for (register int i = 1; i <= n; ++i)   
        for (register Vtx *j = G[i].Head;
            j; j = j->Next)
                if (G[i].Dist + AntiG[j->To].Dist < 
                    MinDist)
                    MinDist = 
                        G[i].Dist + AntiG[j->To].Dist;

    printf("%lld\n", MinDist);

    return 0;
}

二、gene(基因)
一道考察结构体判断函数的写法的题,但是因为题没有读清楚,以为每行随机输入一些数,所以想了很久而且错了。下次要认真读题。
这里要求使用vector,下面复习一下,考试也没有太想清楚。

在c++中,vector是一个十分有用的容器。
作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
特别注意:
使用vector需要注意以下几点:
1、如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;
2、Vector作为函数的参数或者返回值时,需要注意它的写法:
double Distance(vector&a, vector&b) 其中的“&”绝对不能少!!!
实例:vectortest;
//建立一个vector,int为数组元素的数据类型,test为动态数组名
简单的使用方法如下:
vectortest;//建立一个vector
test.push_back(1);
test.push_back(2);//把1和2压入vector,这样test[0]就是1,test[1]就是2
1 、基本操作
(1)头文件#include.
(2)创建vector对象,vector vec;
(3)尾部插入数字:vec.push_back(a);
(4)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(5)删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(6)向量大小:vec.size();
(7)清空:vec.clear();
特别提示:这里有begin()与end()函数、front()与back()的差别
2、重要说明
vector的元素不仅仅可以是int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。

——————————————————————————————————————————

#include<bits/stdc++.h>
using namespace std;
struct f {
    int len;
    int num;
    vector <int> a;
} fi[1000001];
bool cmp(f x,f y) {
    if(x.len==y.len) {
        for(int i=0; i<x.len; i++) {
            if(x.a[i]!=y.a[i]) return x.a[i]>y.a[i];
            if(i==x.len-1) return x.num<y.num;
        }
    }
    return x.len<y.len;
}
int main() {
    int n;
    cin>>n;
    for(int i=1; i<=n; i++) {
        int x;
        cin>>x;
        for(int j=1; j<=x; j++) {
            int temp;
            cin>>temp;
            fi[i].a.push_back(temp);
        }
        fi[i].len=x;
        fi[i].num=i;
    }
    sort(fi+1,fi+1+n,cmp);
    for(int i=1; i<=n; i++) {
        if(i!=n)
            cout<<fi[i].num<<" ";
        else
            cout<<fi[i].num;
    }

    return 0;
}

四、joseph(约瑟夫)
看这个数据规模就知道不能直接模拟,于是找规律。

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
bool Alive[10000000];
int main() {
//  freopen("joseph.in","r",stdin);
//  freopen("joseph.out","w",stdout);
    int m,n;
    cin>>n>>m;
    if(m != 2) {
        int res = 0;
        for(int i = 2; i<=n; i++) {
            res = (res + m) % i;
        }
        cout<<res + 1;
    } else if(m == 2) {
        int temp = m;
        while(temp < n) {
            temp *= 2;
        }
        long long ans = temp - 1 - (temp - 1 - n)*2;
        cout<<ans;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:PADS VX系列是一款电路设计软件,包括xDx Designer、Layout、Router工具。它可以用于软件安装、数据库建立、层次原理图绘制、导出焊接原理图、PADS规则设置(差分,等长、阻抗)、阻抗计算、生产文件的导出(Gerber,Bom,坐标文件,PCB加工工艺)等。这些功能适用于PADS VX1.2和PADS VX2.6版本,并且已经在实际开发中验证过。\[1\] 引用\[2\]:关于PADS VX2.11的安装注意事项,有几点需要注意。首先,安装路径不能太长,最好使用1级路径,否则可能会出现脚本故障。其次,关于Win10自带的杀毒软件和防火墙,可以选择关掉或者保持开启,不过关掉的话安装进度可能会稍慢一些。另外,Win10的版本对安装也有一定影响,专业版、家庭版和教育版都可以使用,但推荐使用专业版。最后,对于PADS版本,VX2.4、VX2.7和VX2.10在安装过程中可能会出现相同的脚本故障。\[2\] 引用\[3\]:关于PADS VX2.11在Win10系统中安装过程中出现的脚本故障问题,可能是由于安装的系统有问题。在Win7系统中安装PADS时没有出现脚本故障,所以可能是软件安装过程中的某个设置问题。可以尝试在解压后的压缩包中,右键点击Setup文件,选择兼容性,以Win7模式运行。这样可能能解决安装过程中的脚本故障,并确保安装完整。\[3\] 综上所述,关于PADS VX2.11的安装,需要注意安装路径不能太长,可以选择关掉或者保持开启Win10自带的杀毒软件和防火墙,推荐使用Win10专业版,以及尝试在兼容性设置中选择Win7模式运行安装程序。希望这些注意事项能够帮助您成功安装PADS VX2.11。 #### 引用[.reference_title] - *1* [PADS VX系列 软件](https://blog.csdn.net/m0_37347207/article/details/124779039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Win10安装PADSVX脚本故障(IPW213)解决办法](https://blog.csdn.net/u010586312/article/details/128751299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值