草庐IT

ACM---大一第三周周赛(Floyd算法+并查集算法学习周)

认真写博客的夏目浅石. 2023-05-22 原文

🚀write in front🚀
📝个人主页:认真写博客的夏目浅石.CSDN
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:ACM周训练题目合集.CSDN
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️为什么我们不知疲倦,因为我们都在做自己所热爱的事 ♐

文章目录


A - Color the ball

杭电—Color the ball

解题思路:考察差分数组,基础模板

#include<iostream>
#include <cstring>

using namespace std;

int arr[100010];
int n,i;

int main()
{
	while(scanf("%d", &n), n!=0)
	{
		memset(arr, 0, sizeof(arr));
		for(i=1;i<=n;i++)
		{
			int l,r;
			cin>>l>>r;
			arr[l]++;
			arr[r+1]--;
		}
		for(i=1;i<=n;i++)
		{
			arr[i]+=arr[i-1];
			if(i!=n)
			{
			    printf("%d ", arr[i]);
			}
			else printf("%d",arr[i]);
		}
		cout<<endl;
	}
	return 0;
}

B - Suits

洛谷—Suits

解题思路:数学问题,一直分类讨论就可以解了

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>

using namespace std;

int a,b,c,d,e,f;
typedef long long ll;
ll m1,m2;
ll mn=-1;


int main() 
{	
	cin>>a>>b>>c>>d>>e>>f;
	int max=0;
	
	int mn=min(a,d);
    int mx=min(c,d);
	if(e*mn+f*min(b,min(c,d-mn))>max)
	{
		max=e*mn+f*min(b,min(c,d-mn));
	}
	
	if(e*min(a,d-min(b,mx))+f*min(b,mx)>max)
	{
		max=e*min(a,d-min(b,mx))+f*min(b,mx);
	}
	
	if(e*mn>max)
	{
		max=e*mn;
	}
	
	if(f*min(b,mx)>max)
	{
		max=f*min(b,mx);
	}
	
	cout<<max;
    return 0;
}

C - 六度分离

杭电—六度分离

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>

using namespace std;

#define inf 0x3f3f3f3f

int g[101][101];
int n,m,ans;


int main()
{
    while(cin>>n>>m)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(i==j) g[i][j]=0;
                else g[i][j]=inf;
            }
        }
        
        while(m--)
        {
            int a,b;
            cin>>a>>b;
            g[a][b]=g[b][a]=1;
        }
        
        for(int k=0;k<n;k++)
        {
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<n;j++)
                {
                    if(g[i][j]>g[i][k]+g[k][j])
                    {
                        g[i][j]=g[i][k]+g[k][j];
                    }
                }
            }
        }
        //以上全部是模板
        int flag=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(g[i][j]>7)
                {
                    puts("No");
                    flag=1;
                    break;
                }
            }
            if(flag) break;
        }
        if(flag==0)
            puts("Yes");
    }
    
    return 0;
}

D - 无处不在的宗教

POJ无处不在的宗教

//水题,竟然我也能AC....
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>

using namespace std;

int n,m;
int p[100010];


int find(int x)
{
    return p[x]==x?x:(p[x]=find(p[x]));//算法模板
    
}
int s=1;
int main()
{
    cin>>n>>m;
again:
    int ans=0;
    for(int i=1;i<=n;i++) p[i]=i;
    
    while(m--)
    {
        int i,j;
        cin>>i>>j;
        i=find(i);
        j=find(j);
        if(i!=j)
        {
            p[i]=j;//模板
        }
    }
    
    for(int i=1;i<=n;i++)
    {
        if(find(i)==i)
        {
            ans++;
        }
    }
    printf("Case %d: %d\n",s++,ans);
    
    cin>>n>>m;
    if(n==0&&m==0) return 0;
    else goto again;
    
    return 0;
}

E - 农场派对

#10075. 「一本通 3.2 练习 1」农场派对

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

#define inf 0x3f3f3f3f//结论,一个很大的数,适合这个算法的初始化

int n,m,x;
long long g[1010][1010];
long long path[1010][1010];

int main()
{
    int max=0;
    cin>>n>>m>>x;
    
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i==j) g[i][j]=0;
            else g[i][j]=inf;
        }
    }
    
    for(int i=1;i<=m;i++)
    {
        int a,b,t;
        cin>>a>>b>>t;
        g[a][b]=t;
    }
	
    for(int k=1;k<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(g[i][j]>g[i][k]+g[k][j])
                {
                    g[i][j]=g[i][k]+g[k][j];
                }
            }
        }
    }
    //以上全部是算法模板
    for(int i=1;i<=n;i++)
    {
        if(g[i][x]+g[x][i]>=max)//这里根据题目要求来写就对了,调试了一会儿AC了
        {
            max=g[i][x]+g[x][i];
        }
    }
    
    cout<<max<<endl;
    
    return 0;
}

F - 怪物(简易版)

A. Monsters (easy version)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>

using namespace std;

typedef long long ll;

ll t,n,arr[200010],i,j;


int main()
{
    cin>>t;
    while(t--)
    {
        ll cnt=0;
        cin>>n;
        
        for(i=1;i<=n;i++) cin>>arr[i];
        
        sort(arr+1,arr+n+1);
        
        if(arr[1]!=1)
        {
            cnt+=arr[1]-1;
            arr[1]=1;
        }
        
        for(i=2;i<=n;i++)
        {
            if(arr[i]-arr[i-1]>=2)
            {
                cnt+=arr[i]-arr[i-1]-1;
                arr[i]=arr[i-1]+1;
            }
        }
        cout<<cnt<<endl;
    }
    
    return 0;
}

G - 嫌疑犯

The Suspects

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>

using namespace std;

int n,m,ans,k;
int p[100010];
int a[100010];

int find(int x)
{
    return p[x]==x?x:(p[x]=find(p[x]));//并查集的固定模板
}

inline void he(int i,int j)
{
    int x=find(i);
    int y=find(j);
    if(x<y)//这里意思是:让小的数做根节点,也是为了贴近题目要求
    {
        p[y]=x;
    }
    else p[x]=y;
}

int main()
{
    while(cin>>n>>m&&n||m)
    {
        ans=0;
        for(int i=0;i<n;i++) p[i]=i;//初始化
        
        while(m--)
        {
            cin>>k;
            cin>>a[0];//合并
            for(int i=1;i<k;i++)
            {
                cin>>a[i];
                he(a[i],a[i-1]);
            }
        }
        for(int i=0;i<n;i++)
        {
            if(find(i)==0)//根据题意来求解。
            {
                ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

比赛情况:

大一第十(前面有个学长试水~),退步好多这一次,下面做一下这一周比赛的一个总结,以便于后面的学习。

表述题目难度以及做题时候的感想:
A---临时加上去的,感觉学长们为了照顾那些爆0的同学加的,简单差分模板。

B---这个是我第二个做出来的,花费了我巨多时间,哭了,我的思维还是不够敏捷,需要多加练习思维题目,不然这种题目大家都拿到了,我还要花好多时间才能过,真的很难受的

C---没时间做,后面自己尝试了一下子,发现只要根据题目逻辑去写是完全套板子的问题,就是多加一点循环和判断的问题。

D---这个更加的板子,我一次可AC了,非常模板。

E---Floyd算法的板子题目,我第一个AC的这个题目,相对于板子,只需要加一点判断就可以了,简单。

F---没时间做,后面自己尝试了一下子,思维题,被我的好哥们讲懂了,我还是不擅长写思维题目,脑子很笨。

G---这个比赛的时候写了,but没写完全,就结束了,后面补了一下题,发现这个题目就是并的时候需要注意外,别的就是板子,害,我可能太笨了。

总结

心态:就是可能看到别人比我聪明,就心里非常难受,比赛的时候落后,心里更是难受,觉得算法好难学啊,好想退缩,但是算法迟早是要学习的,不如顶住压力,好好学,哪怕倒数第一,也要勇往直前,放平心态,继续加油夏目浅石

学习方法:一定要学会思考,把每一周的题目自己独立思考至少30min后不会了再去看答案学习人家的思路,不然效率很低下。还有就是,昨完一定一定要总结模板总结思路总结题型!!!!!!!!!!!

时间安排:后续要晚上7-10点好好学习算法,到宿舍补一补学校课程,看看网课,学校课程能逃就逃,然后学点有用的。

虽然很苦难,但是还是要继续坚持下去。

激励一下自己吧,虽然挺难过的

有关ACM---大一第三周周赛(Floyd算法+并查集算法学习周)的更多相关文章

  1. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  2. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  6. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  7. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

  8. ruby - 尝试比较两个文本文件,并根据信息创建第三个 - 2

    我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende

  9. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  10. 机器学习——时间序列ARIMA模型(四):自相关函数ACF和偏自相关函数PACF用于判断ARIMA模型中p、q参数取值 - 2

    文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk​=Var(yt​)Cov(yt​,yt−k​)​其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞

随机推荐