20260425-入门班-简单模拟02
已结束
IOI
开始于: 2026-5-16 8:00
4
小时
主持人:
34
信奥常用数学符号
属于
求和
相当于
for (int i=1;i<=n;i++){
sum+=i;
}
累乘
函数
连乘
vector
创建容器
vector 可以理解成:
一个可以自动变长的数组。
普通数组:
int a[100];
大小一开始就固定了。
而 vector 可以这样:
vector<int> v;
一开始是空的,后面可以不断加入数据。
vector<int> v;
表示创建一个存整数的 vector。
也可以一开始有 5 个数:
vector<int> v(5);
表示有 5 个元素,默认都是 0。
还可以这样:
vector<int> v(5, 7);
表示有 5 个元素,每个都是 7。
加入元素
v.push_back(10);
v.push_back(20);
v.push_back(30);
现在 v 里有:
10 20 30
访问
vector 和数组一样,从 0 开始编号。
cout << v[0] << endl; // 10
cout << v[1] << endl; // 20
cout << v[2] << endl; // 30
size()
cout << v.size() << endl;
如果 v 里有 3 个数,就输出:
3
遍历
方法一:普通 for
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
方法二:范围 for
for (int x : v) {
cout << x << " ";
}
输入 n 个数并输出
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> v;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
v.push_back(x);
}
for (int x : v) {
cout << x << " ";
}
return 0;
}
array
array 可以理解成:
STL 版的普通数组。
它的大小固定,不能变长。
普通数组:
int a[5];
STL 的 array:
array<int, 5> a;
创建容器
array<int, 5> a;
表示创建 5 个整数。
也可以直接赋值:
array<int, 5> a = {3, 1, 4, 1, 5};
访问
cout << a[0] << endl;
cout << a[1] << endl;
遍历
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
或者:
for (int x : a) {
cout << x << " ";
}
pair
pair 可以理解成:
一个小盒子,里面放两个东西。
比如一个学生有:
姓名 + 分数
一个坐标有:
x + y
这时候就可以用 pair。
创建容器
pair<int, int> p;
表示这个 pair 里有两个整数。
第一个叫:
p.first
第二个叫:
p.second
赋值
方法一:
pair<int, int> p;
p.first = 3;
p.second = 5;
方法二:
pair<int, int> p = {3, 5};
方法三:
pair<int, int> p = make_pair(3, 5);
输出
cout << p.first << " " << p.second << endl;
如果:
p = {3, 5};
输出:
3 5
存坐标
#include <bits/stdc++.h>
using namespace std;
int main() {
pair<int, int> p;
cin >> p.first >> p.second;
cout << "x = " << p.first << endl;
cout << "y = " << p.second << endl;
return 0;
}
结合使用
pair 可以直接排序。
vector<pair<int, int>> v;
如果里面有:
{2, 3}
{1, 9}
{2, 1}
执行:
sort(v.begin(), v.end());
排序后:
{1, 9}
{2, 1}
{2, 3}
规则是:
先比 first,first 小的在前。 first 相同,再比 second。
struct br{
string name;
int year;
int id;
}a[1000];
bool cmp(br p,br q){
if(p.year<60&&q.year<60){
return p.id<q.id;
}
else if(p.year>=60&&q.year>=60){
if(p.year!=q.year){
return p.year>q.year ;
}
else{
return p.id<q.id;
}
}
else{
return p.year>q.year ;
}
}
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].year;
a[i].id=i;
}
sort(a+1,a+1+n,cmp);
}
struct stu{
int c,m,e;
int rank;
int id;
}s[10005];
bool cmp(stu p,stu q){
if(p.c+p.m+p.e != q.c+q.m+q.e){
return p.c+p.m+p.e > q.c+q.m+q.e ;
}
else if(p.c+p.m != q.c+q.m){
return p.c+p.m > q.c+q.m;
}
else if(max(p.c,p.m) != max(q.c,q.m)){
return max(p.c,p.m) > max(q.c,q.m);
}
return 1;
}
bool cmp2(stu p,stu q){
return p.id<q.id;
}
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i].c>>s[i].m>>s[i].e;
s[i].id=i;
}
sort(s+1,s+n+1,cmp);
for(int i=1;i<=n;i++){
if(s[i].c+s[i].m+s[i].e == s[i-1].c+s[i-1].m+s[i-1].e&&s[i].c+s[i].m == s[i-1].c+s[i-1].m&&max(s[i].c,s[i].m) == max(s[i-1].c,s[i-1].m)){
s[i].rank=s[i-1].rank;
}
else s[i].rank=i;
}
sort(s+1,s+1+n,cmp2);
for(int i=1;i<=n;i++){
}
}
- 状态
- 已结束
- 规则
- IOI
- 题目
- 6
- 开始于
- 2026-5-16 8:00
- 结束于
- 2026-5-16 12:00
- 持续时间
- 4 小时
- 主持人
- 参赛人数
- 34