AtCoder Beginner Contest 226 B Counting Arrays 容器vector 集合set 初始化和基本操作 方法函数

ACM实验室要比赛筛人了,说是要在AtCoder上参加AtCoder Beginner Contest 230 这场比赛。

还从来没有在AtCoder上做过题,看到刚结束的AtCoder Beginner Contest 226,就打开做了做。

第一题,三位小数四舍五入,算是签到题了,4分钟,A了。(心里想,这Beginner Contest难度挺。。。。。

第二题,筛掉重复的数组,我。。。。想了想,暴力,不行,害,不会了。

快上课了,简简单单看了个题解,真的妙。

(提到组,就可以考虑vector)
(提到重复,就可以考虑set)

可,vector和set不会呀,怎么办怎么办。

还能怎么办,学呗。

先学一下vector:

是啥:是个容器,可容纳许多类型,还可以看成动态数组。
咋用:#include<vector> 头文件,不用说了。

初始化:
1、定义一个动态数组:

vector<int>a;

输一个数据,开一个空间。
2、定义一个10个元素的向量,没初值,随机数。虽然devc++上初值是0:

vector<int>a(10);

3、定义并赋值,十个值都为1:

vector<int>a(10,1);

4、定义vector a 并从vector b中赋值,a和b一样:

vector<int>a(b);

5、定义vector a 并用vector b中某些值赋值,从0到5(不包括5)

vector<int>a(b.begin(),b.begin()+5);

6、从数组中初始化赋值:

int a[5]={1,2,3,4,5};
vector<int>b(a,a+5);

初始化之后,就看最重要的内置函数了,这里写点常用的:

返回a的第一个元素:a.front();
返回a的最后一个元素:a.back();
返回a的第i个元素(元素存在):a[i];
清空a中元素:a.clear();
判断是否为空:a.empty();
删除a的最后一个元素:a.pop_back();
删除a的13位置的元素:a.erase(a.begin()+1,a.begin()+3);
在a最后插入一个元素6:a.push_back(6);
在a的第一个元素的位置插入元素6:a.insert(a.begin()+1,6);
在a的第13的元素位置插入三个6:a.insert(a.begin()+1,3,6);
返回a的元素个数:a.size();
a中元素与b中元素整体交换:a.swap(b);

vector算是写完了,吃饭去。
第二天接着写set:
先插入一个预备小知识:关联式容器和顺序容器。

关联容器中的元素按关键字保存和访问,顺序容器中元素按它们在容器中的位置顺序保存和访问。

这特点导致,关联容器不支持顺序容器的位置相关的操作,但支持高效的关键字查找和访问。

set中元素自动排序,元素值唯一。

头文件不用说了吧:#include<set>
初始化:set<int> a;
常用方法:

a.begin();返回set中第一个元素
a.end();返回set中最后一个元素
a.clear();删除set中所有元素
a.empty();判断set中是否为空
a.size();返回当前set中的元素个数

终于学完基本的vector和set,强大的stl以后一定常用。
接下来看这个题吧。
题目大概这个意思:给你N个S长度的序列,不重复的序列个数有多少个。

上vector和set!

把每个序列都存到vector里,这样:

int n;
cin >> n;
vector<int> tmp;
for(int i=1;i<=n;i++)
{
	int s;
	cin >> s;
	tmp.push_back(s);
}

然后是创建set,把每个vector插入set中去,像这样:

set<vector<int> > mp;
mp.insert(tmp);

最后输出set的长度:

cout << mp.size() << endl;

所以,这道题AC的代码:

#include<iostream>
#include<vector>
#include<set>
using namespace std;
int main()
{
	int t;
	cin >> t;
	set<vector<int> > mp;
	while(t--)
	{
		int n;
		cin >> n;
		vector<int>tmp;
		for(int i=1;i<=n;i++)
		{
			int s;
			cin >> s;
			tmp.push_back(s);
		}
		mp.insert(tmp);
	}
	cout << mp.size() << endl;
	return 0;
}

管事!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: atcoder beginner contest 226 是一个由 AtCoder 组织的初学者比赛,旨在为初学者提供一个锻炼自己编程能力的机会。比赛通常包括多个问题,难度从简单到困难不等,参赛者需要在规定时间内解决尽可能多的问题。该比赛吸引了来自世界各地的初学者参加,是一个非常有趣和有挑战性的比赛。 ### 回答2: AtCoder Beginner Contest 226 是日本AtCoder举办的一场新手比赛。这场比赛通常设有三到五个问题,题目难度逐渐增加,旨在让初学者锻炼编程技巧和算法思维。 比赛开始时,参赛选手需要在指定时间内独立解决各个问题。比赛网站提供了在线编程环境,选手可以使用C++、Python、Java等常见编程语言提交代码。解题的时间和代码正确性都会影响选手的得分。 题目的类型非常多样,通常涵盖了数据结构、图论、动态规划、贪心等算法知识点。选手可以从题目描述中获得输入输出的要求,并根据题意编写代码来解决问题。 在比赛过程中,选手需要尽快理解题目,并设计出正确的解决方案。正确的思路及合理的实现将是获得高分的关键。因此,参赛选手需要在比赛前充分复习算法知识、熟练掌握编程语言,并在实践中提高自己的编码能力。 ATCoder Beginner Contest 226 不仅考验了参赛选手的算法和编程水平,还对他们的应变能力和时间管理能力提出了要求。即使是经验丰富的选手,也需要在限定时间内思考问题、调试代码,尽量取得更好的成绩。 通过参加此类竞赛,选手可以提高自己的编程技能、拓宽解题思路,并加深对算法和数据结构的理解。同时,比赛过程中还可以与其他选手交流经验,提高团队合作和竞争意识。 总而言之,AtCoder Beginner Contest 226 是一场适合初学者的编程比赛,通过参与其中,选手可以提高自己的编程能力,拓宽算法思维,并享受竞赛的乐趣。 ### 回答3: AtCoder Beginner Contest 226是AtCoder举办的一场面向初学者的比赛。这场比赛通常由3到4道问题组成,涵盖了算法和编程的各个方面。 比赛开始时,参赛选手将在规定的时间内独立解答问题。每个问题都有不同的难度和分值,选手需要在限定时间内尽可能解决更多的问题,并在解答正确的情况下获得更高的得分。 比赛过程中,选手可以使用自己熟悉的编程语言,如C ++,Java或Python。他们需要运用算法和数据结构的知识,设计出高效的解决方案,并考虑到时间和空间的复杂度来优化代码。 此外,比赛还严格限制了提交次数和解答时间,这要求选手在思考和编码时要快速和准确。选手需要经常检查他们的代码是否符合问题的要求,并在必要时进行调试。 比赛结束后,AtCoder将根据选手的成绩排名,并授予他们相应的奖励。排在前几名的选手将获得奖牌,他们的成绩也将被列入AtCoder的排名榜。 总的来说,AtCoder Beginner Contest 226为初学者提供了一个锻炼算法和编程能力的机会。通过参加这样的比赛,选手可以提高他们的技能,并与其他热爱编程的人分享和交流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三元湖有大锦鲤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值