目录
所学到的知识:
vector<int> v(n) : 表示一个容量为n的vector
vector<int>v[n] : 表示n个vector v,容量不确定。相当于 vector<vector<int>> v(n)
有二维数组那味。
ios::sync_with_stdio(false); 写在main函数里即可.
这个可以大幅提高大数据的输入和输出以节省时间.
C++写C cin和cout的输入和输出效率比scanf和printf低,原来而cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入 输出缓存,可以节省许多时间,使效率与scanf与printf相差无几,还有应注意的是scanf与printf使用的头文件应是stdio.h而不是 iostream。
还有此题中学到的有: C++增强for循环
#include <iostream>
using namespace std;
int main()
{
int array[] = { 1,1,2,3,5,8 };
//常规for循环
for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
{
cout << array[i] << " ";
}
cout << endl;
for (auto item : array) // 类型自动推导auto关键字
{
cout << item << " ";
}
return 0;
}
#include <iostream>
#include <set>
using namespace std;
int main()
{
multiset<int> ms = { 1,2,6,2,4,3,3,8 };
//增强for循环输出
for (auto item : ms)
{
cout << item << " ";
}
cout << endl;
//迭代器模式输出
for (multiset<int>::iterator it = ms.begin(); it != ms.end(); it++)
{
cout << *it << " ";
}
return 0;
}
题目:
小A是一个游戏爱好者,他对游戏里的等级有着奇怪的执念。现在他知道游戏服务器里的玩家编号与等级(游戏的等级上限是100),他想要你根据等级从小到大输出玩家编号。
输入格式:
输入共三行。
第一行输入一个正整数N(N≤3×106)
第二行输入N个正整数a1,a2,...,aN, 其中ai(ai≤109)表示第i个玩家的编号
第三行输入N个正整数b1,b2,...,bN, 其中bi(1≤bi≤100)表示第i个玩家的等级
数据保证没有两个玩家拥有相同的编号。
请注意:由于输入输出数据规模过大,请尽可能使用scanf/printf等较快的输入输出方式。
输出格式:
根据等级从小到大输出玩家编号, 若等级一致,则根据输入的先后顺序输出玩家编号, 以换行作为分割。
输入样例:
5
123123 321321 2222 1 3
1 1 100 3 2
输出样例:
123123
321321
3
1
2222
代码:
#include<iostream>
#include <vector>
using namespace std;
int main() {
int n;
scanf("%d", &n);
vector<int>v[101], a, b;
for(int i=0;i<n;i++)
{
int t;
scanf("%d", &t);
a.push_back(t);
}
for (int i = 0;i < n;i++)
{
int t;
scanf("%d", &t);
b.push_back(t);
}
for (int i = 0;i < n;i++) {
v[b[i]].push_back(a[i]);
}
for (int i = 0;i <=100;i++)
{
for (int t : v[i])
printf("%d\n", t);
}
return 0;
}