目录
- 讲在前面(必看)
- 八卦阵
- 题目描述
- 输入格式
- 输出格式
- 输入输出样例
- 数据范围
- AC代码及要点
- 决赛应援
- 题目描述
- 输入格式
- 输出格式
- 输入输出样例
- 数据范围
- AC代码及要点
讲在前面(必看)
本篇为练习篇, vector讲解篇在这里.
菜鸟食用前请做好心理准备(你懂的)
八卦阵
题目描述
n
名同学在演练八卦阵法!具体而言,n
名同学分别组成了 8 个队伍,编号为 1~8,是为“八卦阵”。
然而,为使得阵法虚虚实实,同学们开始变阵啦。具体而言,一次变阵用x, y
两个数表示,就是将x
号队伍与y
号队伍整体交换。
请输出最后的阵型吧。
输入格式
输入共m+2
行:
第 1 行,两个整数n
, m
,为同学人数和变阵次数;
第 2 行,n
个整数a[1], a[2], ..., a[n]
,依次为同学的编号。约定第1~8
个(即a[1], a[2], ..., a[8]
)分别属于1~8
队,第9~16
个同学分别属于1~8
队,以此类推;
之后m
行,每行两个整数x, y
,表示本次变阵将x
号队伍与y
号队伍整体交换。
输出格式
输出共8
行:
每行依次为1,…,8
号队伍的学员编号,每支队伍的学员编号输入顺序排列;保证每个队伍都有人。
输入输出样例
input:
11 2
3 4 5 1 2 8 9 10 11 6 7
1 2
3 4
output:
4 6
3 11
1
5 7
2
8
9
10
数据范围
8 ≤ n
≤ 1000;1 ≤ m
≤ 100;1 ≤ a[1], a[2], ..., a[n]
, 1000,000,000;1 ≤ x
, y
≤ 8。
AC代码及要点
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;vector<int> q[10];int main(){int n, m;cin >> n >> m;for(int i = 0; i < n; i++){int x;cin >> x;// 分组并插入q[i % 8].push_back(x);}// 输入并交换for(int j = 0; j < m; j++){int x, y;cin >> x >> y;swap(q[x - 1], q[y - 1]);}// 循环并输出for(int i = 0; i < 8; i++){for(int j = 0; j < q[i].size(); j++){cout << q[i][j] << ' ';}cout << endl;}return 0;
}
本题最难点在于分组的方法, 其实用一个%取余符号就解决了.
决赛应援
题目描述
2 支篮球队伍进入了篮球大赛决赛!每个篮球队伍都有自己的球迷团,每位球迷都有自己的编号,约定球迷编号为奇数的支持队伍一,偶数的支持队伍二。
请根据 n
个球迷的编号,确定队伍一、二的球迷团名单。
输入格式
输入共 2 行:
第 1 行,一个整数 n,为球迷总人数;
第 2 行,n 个整数a[1], a[2], ..., a[n]
, 依次为球迷的编号。
输出格式
输出 2 行:
第 1 行,队伍一的球迷团编号,按输入顺序输出;
第 2 行,队伍二的球迷团编号,按输入顺序输出。
输入输出样例
input:
8
3 4 1 2 9 8 6 7
output:
3 1 9 7
4 2 8 6
数据范围
1 ≤ n ≤ 100,000;1 ≤ a[1], a[2], ..., a[n]
≤ 100,000,000。
AC代码及要点
#include <iostream>
#include <vector>
using namespace std;vector<int> v1, v2;int main()
{int n;cin >> n;for(int i = 0; i < n; i++){int x;cin >> x;if(x % 2 == 0) v2.push_back(x);else v1.push_back(x);}for(int i = 0; i < v1.size(); i++){cout << v1[i] << ' ';}cout << endl;for(int i = 0; i < v2.size(); i++){cout << v2[i] << ' ';}return 0;
}
这道题总体简单, 只要注意数据分组就好了.