本周学习总结22.5.9-5.15:拓扑排序、比赛、最小生成树

由于本周六请假返乡就医(暂缓返校),学习时间会减少,返校日期定不下来,这次博客是在泰安站候车时与在火车上写的。

选修acm程序设计基础也已经两个多月了,虽然由于精力和时间问题导致学习时间很少,但是我也渐渐养成了看博客、翻资料的习惯,其实我也把其他事情全放掉,一心学习acm,但是我的外语语种几乎断了我继续学acm的路,我的外语是日语,英语一窍不通,现在打codeforces题目是完全看不懂的,翻译软件在翻译的时候也总会有各种各样的翻译错误,导致我每次读题时间比别人多好几倍,如果以后正式打比赛更没有翻译软件了,那连题都读不懂更不用说要打比赛拿名次了,所以我还是同时把精力放到了别的上面。

当然,既然已经学了这么长时间的acm了,肯定不能轻易就放弃,还是要继续学下去,最起码把本学期和课认认真真学下去,虽然由于语种问题无法打比赛,但是学习思维、知识、学习方法也是颇有收获。

本周学的不多,精力分散是一个原因,主要原因是从上周开始感觉学习起来挺吃力的,也不仅仅只有这一门,其他科目学起来也渐渐感到吃力了,然后周四去看心理医生,疏导了一下。本周把kruskal算法啃下来了,然后其他的学习主要还是以看博客为主,晚上只要有时间就做洛谷,博客看了并查集、拓扑排序和kruskal算法的例题;prim算法的题目我也看了,看不懂。

周二的codeforces,由于是div.4,前几道题挺简单的

A. Lucky?这个签到题的意思是,给出一个六位数的数字,求前三位数的和是否等于后三位数的和,是输入yes,否输入no,这个题的唯一难度在于如何提取每一位的数,当然方法很多,我有两种方法:第一种是定义一个char类型的数组,输入后将每一个元素都减去“0”的ASCII码,得到实际数字,然后开始判断是否满足条件;第二种方法是直接输入int类型数字,定义变量名为a,然后提取个位(a%10),提取十位(a/10%10),提取百位(a/100%10),以此类推,直至求出所有位,然后开始判断即可,这个题我用了4分钟就ac了,是我a的最快的一道题

B. Equal Candies这个题的意思是,有n盒糖,每盒糖的数量都不一样,在取出最少的糖的要求下使得每盒糖的数量都一样。其实实现起来也很简单,首先找出n盒糖中最少的一盒有多少糖,然后让每盒糖都减去比最少的一盒多的糖,将这些多出来的糖加起来就是所求的答案。我甚至感觉B题比A题更简单。

C. Most Similar Words从C题开始就有一点难度了,这个题的意思是:给出好多个字符串,按照26个字母的顺序,字母顺序离得越近,就代表越相似,比如说:a和c离着2,就是a变成c需要a-b-c两步,再比如说,h和q离着9,就是h-i-j-k-l-m-n-o-p-q九步,题中给出n个字符串,每个字符串的长度都一样,此时求其中两个离得最近的字符串距离多远,也就是说如何用最小步数将一个字符串变成另外一个字符串,这个题我没有A掉,我是这样做的:

首先输入字符串,并且按照每个字符(a=1,b=2......z=26)这样的要求去将每个字符所代表的数字加起来,然后判断找出n个字符串中两个数字最为相似的,去这两个数字的差输出。当然,我这个做法是错误的,经过我再次修改,这次我定义了一个二维数组,存储字符串,也就是说将所有字符全存在一起,然后遍历n行字符串的每一横的差,时间复杂度为On2,由于题中表示输入的字符串不多,所以就不用担心超时问题,使每一行字符串与其余所有字符串都比较计算之后,求出其中的最小值,并输出,这次给出的例字可以运行了,但还是没有ac。

#include<iostream>
using namespace std;
char a[50][50];
int b[50];
int main() {
	int t;
	cin >> t;
	for (int q = 1; q <= t; q++) {
		int n, m;
		cin >> n >> m;
		for (int i = 1; i <= n; i++) {
			int index = 0;
			for (int j = 1; j <= m; j++) {
				cin >> a[i][j];
				index += a[i][j];
			}
			b[i] = index;
		}
		int minn = 1000000;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				if (i != j) {
					if (abs(b[i] - b[j]) <= minn) {
						minn = abs(b[i] - b[j]);
					}
				}
			}
		}
		cout << minn << endl;
	}
}

关于最小生成树,kruskal算法还是更适合我,就是定义结构体存起点终点和路程,然后根据路程排序,再定义一个并查集存储祖宗,定义函数,先根据路程排序,然后记录路程并把该起点终点连通,最终得题意中所需的答案

void kruskal()
{
    sort(edge,edge+m,cmp);
    for(int i=0;i<m;i++)
    {
        eu=find(edge[i].u), ev=find(edge[i].v);
        if(eu==ev)continue;
        ans+=edge[i].w;
        fa[ev]=eu;
        if(++cnt==n-1)break;
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在CentOS 8系统中,当我们使用ping命令ping一个域名(例如www.baidu.com)时,可能会出现“name or service not known”的错误提示。 这个错误提示的意思是找不到该域名的解析记录或者DNS服务不可用。在Linux系统中,域名解析通常是通过DNS进行的,而DNS服务器是一个重要的中央服务,用于将域名解析为IP地址,所以当我们在使用ping命令的过程中,需要使用DNS服务器来解析域名。 那么如何解决“name or service not known”错误呢?以下是一些可能的解决方法: 1.检查DNS服务器是否可用。可以尝试使用nslookup命令来检查DNS服务器是否正常工作,并且能够正确地将域名解析为IP地址。 2.检查/etc/resolv.conf文件。该文件中定义了系统默认使用的DNS服务器,可以检查其中的设定是否正确。可以尝试手动将DNS服务器修改为其他可用的DNS服务器,例如Google公共DNS服务器(8.8.8.8和8.8.4.4)。 3.检查网络连接是否正常。如果网络连接出现故障,可能会导致DNS服务不可用。可以尝试使用ping命令ping其他IP地址,例如百度的IP地址(202.108.22.5),来确定网络连接是否正常。 总之,当出现“name or service not known”错误时,我们需要仔细检查系统设置和网络连接,以找出故障的原因,并采取相应的措施来解决问题。这将有助于我们更好地使用CentOS 8系统,并提高我们的工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩Scott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值