草庐IT

自学1

wanyy-home 2023-11-17 原文

Problem1 明明的随机数

## 题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N <= 100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

## 输入格式

输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。

第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。

## 输出格式

输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。

第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

## 样例输入

10

20 40 32 67 40 20 89 300 400 15

## 样例输出

8
15 20 32 40 67 89 300 400

## 题解

由题目可知,这是一道关于“排序”和“去重”的问题,我们首先要进行排序,因为排序后的数列如果有相同的数字那一定是连续的,可以由它后面的一个数字代替(即当出现相同数字时,后面整体数字前移一位)。

## AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main() {
 5     int n, sum = 0;
 6     int a[110];
 7     cin >> n;
 8     for(int i = 1; i <= n; i ++)
 9         cin >> a[i];
10     sort(a + 1, a + 1 + n);
11     for(int i = 1; i <= n; i ++)
12         if(a[i] != a[i + 1])
13             sum ++;
14     cout << sum << endl;
15     for(int i = 1; i <= n; i ++)
16         if(a[i] != a[i + 1])
17             cout << a[i] << " ";
18     return 0;
19 }

## 拓展

这道题可以通过使用STL做,代码如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 set<int> s;
 5 
 6 int main() {
 7     int n, num;
 8     cin >> n;
 9     for(int i = 0; i < n; i ++) {
10         cin >> num;
11         s.insert(num);
12     }
13     cout << s.size() << endl;
14     while(s.empty() == 0) {
15         cout << *s.begin() << " ";
16         s.erase(s.begin());
17     }
18     return 0;
19 }

Problem2 村村通

## 题目描述

某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?

## 输入格式

输入包含若干组测试数据,每组测试数据的第一行给出两个用空格隔开的正整数,分别是城镇数目 n 和道路数目 m ;随后的 m 行对应 m 条道路,每行给出一对用空格隔开的正整数,分别是该条道路直接相连的两个城镇的编号。简单起见,城镇从 1 到 n 编号。

注意:两个城市间可以有多条道路相通。

在输入数据的最后,为一行一个整数 00,代表测试数据的结尾。

## 输出格式

对于每组数据,对应一行一个整数。表示最少还需要建设的道路数目。

## 样例输入

4 2
1 3
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0

## 样例输出

1
0
2
998

## 题解

这道题考察的是并查集。

我们首先要处理每一条存在的边,把所有存在的边所连接的两个结点用并查集合并。

然后记录不同的代表元素个数,即可得知连通块数量。

## AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N = 1010;
 5 int f[N];
 6 int n, m;
 7 
 8 //初始化
 9 void init() {
10     for(int i = 1; i <= n; i ++)
11         f[i] = i;//自己的父亲就是自己
12 }
13 
14 //寻找祖先
15 int find(int x) {
16     if(f[x] == x)
17         return x;
18     return f[x] = find(f[x]);
19 }
20 
21 int main() {
22 
23     while(cin >> n >> m) {
24         init();
25         while(m --) {
26             int a, b;
27             cin >> a >> b;
28             int x = find(a), y = find(b);//压缩路径
29             f[x] = y;
30         }
31         int ans = 0;
32         for(int i = 1; i <= n; i ++)
33             if(f[i] == i)//合并集合后,自己的父亲就是自己的,视作生成树
34                 ans ++;
35         //ans个连通块可以看作ans个结点,那么ans个结点并入一个生成树需要ans-1条边
36         cout << ans - 1 << endl;
37     }
38     return 0;
39 }

 

有关自学1的更多相关文章

  1. 自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第一部分 - 2

    我是去年9月22日才正式学习Java的,因为在国营单位工作了4年,在天津一个月工资只有5000块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。而且国营单位的气氛是你干的多了,领导觉得你有野心,你干的不多,领导却觉得你这个人不错。我才26周岁,实在的受不了这种工作氛围,情绪已经压制了很多久,一心想着要跳出来,却一直找不到合适的机会。因为身边的朋友有在北京做Java开发的,他工作了四五年的时间,可以在北京拿到3万的月薪,说心里话我是真的羡慕,这远超出了我的认知范围。所以经过朋友的推荐,我开始学习Java,一共学了大概5个多月的时间,今年的3月6号在天津找到了一份Java开发

  2. 零基础学Linux运维,看这一篇就够了(含30G自学教程笔记) - 2

    作为一个10年老运维,在开始这篇文章之前,先送给大家一句话:干啥不好,非要做运维,听人劝,吃饱饭,趁年轻,换行吧!好了,不开玩笑了,回到正文中来。当谈到运维职业发展情况时,很多人都会说运维做不长久,然后劝人做两年就赶快转研发吧!总之是全面唱衰运维!但作为一个老运维,我想说的是:运维转开发确实是一个不错的选择,但运维做不长久则完全是对运维的偏见了!很多人有运维做不长久的偏见的原因其实和运维职业的特性有关,运维有三个老生常谈的特点:打杂,背锅,睡的少!说运维打杂,是说运维工作比较宽泛,运维职业门槛不高,什么都得会一点。公司里但凡跟计算机有关的事,可能都会找到运维,这就导致了运维工作比较杂!至于背黑

  3. 【自学Python】Python查找字符串 - 2

    Python查找字符串Python查找字符串教程在开发过程中,很多时候我们有在一个字符串中查找另一个字符串的需求,在Python中,在一个字符串中查找另一个字符串我们使用find()函数。Pythonfind()函数详解语法S.find(sub[,start[,end]])->int参数参数说明s表示原字符串。sub表示要检索的字符串。start表示开始检索的起始位置。如果不指定,则默认从头开始检索。end表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。返回值find()函数返回int类型的值,如果包含,则返回第一次出现该字符串的索引;反之,则返回-1。案例查找单个字符使用find(

  4. 自学接口自动化测试 - 2

        当你乘坐火车的时候,你不会想到一个30000mA(111Wh)的充电宝突然无法带上车了,你会不会生气呢?最新的铁路携带物品规定于7月开始实施,充电宝最多携带两个,每个额定容量不超过100Wh,也就是27000mA,所以过安检会让你要么寄快递,要么让别人来拿,要么留下,反正你是带不上火车的,要是你强行带走,可能警察也会强行把你带走。吃一点长一智,所以每次出行乘坐交通工具时,先看一看携带物品是否可以上车,充电宝、打火机、压缩性气体罐装物品如喷雾、香水、酒等等,不然非常影响你的出行,当然开车不需要考虑这些问题。说到底,还是没钱,还是要努力学习啊。    这次总结的是(三)接口自动化测试-Py

  5. javascript - 是否有人设法通过主要使用 JavaScript 进行开发来自学强大的 OOP 技能? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我正在努力做到这一点,我是一名全职前端开发人员,并且知道我还没有实现这一目标。当我提到OOP技能时,我指的是理解和熟悉继承、多态、封装、抽象等概念。我知道在业余时间专注于另一种语言可能更有可能实现我所追求的目标。这是计划,但我真的很想知道是否有人完全通过JavaScript实现了这一目标,以及您是如何做到的。最好听听来自使用不同编程语言的强大OOP开发人

  6. 视频剪辑教程自学技巧:关于正确的短视频剪辑流程分享 - 2

    视频剪辑教程自学技巧:关于正确的短视频剪辑流程分享短视频的火热程度自然不用说,而这大概也是越来越多的人开始做短视频的原因。不过对于大多数的人来说,学习短视频剪辑,其实都是自学,这就导致很多人可能都还不知道正确的短视频剪辑流程。那么接下来我们就来分享一下短视频剪辑教程自学小技巧——关于正确的短视频剪辑流程。第一步:建立好项目文件夹。做短视频剪辑,当然要先准备好素材,而在准备好素材之前,我们就还需要建立好项目文件夹,这样才能在获得素材之后,将它们分门别类地放好。一般是可以根据时间、地点、大体的拍摄内容等进行分类,大家根据自己的喜好进行分类即可。第二步:撰写脚本。在剪辑短视频之前,我们还需要先撰写好

  7. 网络安全自学入门:(超详细)从入门到精通学习路线&规划,学完即可就业 - 2

    很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。算上从学校开始学习,已经在网安这条路上走了10年了,无论是以前在学校做安全研究,还是毕业后在百度、360从事内核安全产品和二进制漏洞攻防对抗,我都深知学习方法的重要性。没有一条好的学习路径和好的学习方法,往往只会事倍功半。网络安全再进一步细分,还可以划分为:网络渗透、逆向分析、漏洞攻击、内核安全、移动安全、破解PWN等众多子方向。今天的这篇,主要针对网络渗透方向,也就是大家所熟知的“黑客”的主要技术,其他方向仅供参考,学习路线并不完全一样,有

  8. 自学区块链:原理、技术及应用——什么是区块链(笔记) - 2

    Bitcoin和区块链有很深的渊源,但Bitcoin与区块链两者不能等同。区块链是Bitcoin的底层技术,除了Bitcoin,还有很多其他的区块链技术应用。什么是“区块链”?时间戳服务器对以区块(Block)形式存在的一组数据实施随机散列,并加上时间戳,然后将该随机散列进行广播。该时间戳能够证实特定数据于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(Reinforcing),这样就形成了一个链条(Chain),即区块链。区块?从本质上说,区块链中的区块,是由一系列特征值和

  9. 两万字《Java完全自学手册》15张导图,送给所有的零基础小白(建议收藏) - 2

    领取福利15张学习路线导图3G学习资料10G计算机书籍哈喽,大家好,我是一条~Java学习如逆水行舟,不进则退。一条一路自学过来,踩过很多坑,吃过很多苦。现在回想起来,当初要是能有一个完整的学习路线让我按图索骥就好了。思来想去,决定总结一份学习路线来帮助正在路上或者准备出发的Java新手。完整路线该路线图右侧为主路线,需循序渐进,步步为营;左侧为辅助路线,需贯穿始终,熟练掌握。建议做好时间规划,不断的提高自己的学习效率,学习过程中尽量把手机调至静音给自己一个安静的学习环境和氛围。同时,巧妇难为无米之炊,一条学习新知识的一般方法为先看视频学基础,再看书学原理,最后看博客查缺补漏,沉淀消化。最后,

  10. java - 有趣的自学开源 API (Java)? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion作为精心设计的艺术作品的例子,您推荐的前3个开源API(Java语言)是什么?那将是您乐于浏览并从中获得一些见解的代码。可接受任何问题域。此处强调的是代码的教育/学习质量、复杂程度-中级到顶级。非常感谢您的回复。

随机推荐