计蒜客 堆积木
2017-11-07 20:08
260 查看
蒜头君有 n 块积木,编号分别为 1 到 n。一开始,蒜头把第 i 块积木放在位置 i。蒜头君进行 m 次操作,每次操作,蒜头把位置 b 上的积木整体移动到位置 a 上面。比如 1 位置的积木是 1,2 位置的积木是 2,那么把位置 2 的积木移动到位置 1 后,位置 1 上的积木从下到上依次为 1,2。
接下来 m 行,每行输入 2 个整数 a,b(1≤a,b≤n),如果 a,b 相等则本次不需要移动。
这道题主要考察了对于动态数组vector的实际运用
主要运用了迭代器、释放内存、复制等技巧
我们来列举一下本代码需要普及的知识:
这段代码的意思就是把从
这段代码主要起到的作用是,释放一个vector内的内存。如果仅用
这段代码就是vector的迭代器了。关于迭代器,我现在也不是很清楚,我个人的理解是,从
其他就模拟一下就行了吧,不需要过于复杂的讲了。
于就水…
输入格式
第一行输入 2 个整数 n,m(1≤n≤10000,0≤m≤10000)。接下来 m 行,每行输入 2 个整数 a,b(1≤a,b≤n),如果 a,b 相等则本次不需要移动。
输出格式
输出 n 行,第 i 行输出位置 i 从下到上的积木编号,如果该行没有积木输出一行空行。样例输入1
2 2 1 2 1 2
样例输出1
1 2
样例输入2
4 4 3 1 4 3 2 4 2 2
样例输出2
2 4 3 1
这道题主要考察了对于动态数组vector的实际运用
主要运用了迭代器、释放内存、复制等技巧
我们来列举一下本代码需要普及的知识:
v[a].insert(v[a].end(), v[b].begin(), v[b].end());
这段代码的意思就是把从
v[b].begin()开始,到
v[b].end()中的所有元素都copy到
v[a].end()之后,相当于移动了整个
v[b]到
v[a]上。
{vector <int> tmp; v[b].swap(tmp); }
这段代码主要起到的作用是,释放一个vector内的内存。如果仅用
vector.clear(),那么本题的第10个点会超内存限制。所以,我们就不能使用不会释放内存,只会清空数组的
clear了。我们需要使用更高级的办法——将vector与另一个临时的局部变量vector进行交换,然后由于是局部变量,那么系统将会自动释放这些内存,就不会超限了。
for(vector <int>::iterator it = v[i].begin(); it < v[i].end(); ++it) {...}
这段代码就是vector的迭代器了。关于迭代器,我现在也不是很清楚,我个人的理解是,从
v[i].begin()开始,由于vector是一段连续的内存地址,所以可以一直到
v[i].end()结束。关于迭代器的更多,大家可以自行查找,我在以后几天也会自己补充这方面的知识。
其他就模拟一下就行了吧,不需要过于复杂的讲了。
于就水…
#include <iostream> #include <vector> using namespace std; int n, m; vector <int> v[10010]; int main() { cin >> n >> m; for(int i = 0; i < n; ++i) v[i].push_back(i); for(int i = 0; i < m; ++i) { int a, b; cin >> a >> b; if(a == b) continue; --a; --b; v[a].insert(v[a].end(), v[b].begin(), v[b].end()); { vector <int> tmp; v[b].swap(tmp); } } for(int i = 0; i < n; ++i) { for(vector <int>::iterator it = v[i].begin(); it < v[i].end(); ++it) { cout << (*it)+1; if(it < v[i].end()-1) cout << " "; } cout << endl; } return 0; }
相关文章推荐
- 计蒜客习题-蒜头君的积木
- 计蒜客习题:蒜头君的积木
- 玩积木的程序员
- Unix搭积木思想与Google Code Wiki
- Asp.net Mvc 的积木,谈Asp.net MVC中视图逻辑模块化和controller组件的使用方法
- xtu 1464 堆叠积木
- 童心未泯?LEGO积木iPod touch外壳,自己拼积木!
- Windows界面编程第十一篇 位图显示特效 随机积木效果
- NYOJ 265题 积木
- RF源码阅读(碎片纪录)-Python积木之contextlib
- wikioi3288 积木大赛
- 浙江省选积木城堡题解
- 计蒜客 挑战难题 第14题:罗马数字转换成整数
- 计蒜客--第28题:等和的分隔子集
- 计蒜客课程系列:统计三角形(DFS+哈希状态存储标记)
- 计蒜客第17题---X的平方根
- 计蒜客 京东的物流路径
- 计蒜客 难题题库 012 最后一个单词的长度
- 计蒜客 难题题库 032 罗马数字