作业介绍
二阶(上)练习:
- 字符串
- 数学思维
- 二进制
- 筛素数
- 位运算
2023年11月11日课程内容:set,map,vector,sort,lower_bound,upper_bound,memset,fill,next_permutation
最后面加入了今年CSP-J组的的前三题,完成前面题目的同学可以尝试一下
set<int> s; // 定义
s.insert(x); // 插入一个元素x
s.count(x); // 计算一个元素x的个数
s.size(); // 访问set中元素的个数
*s.begin(); // 访问set的第一个元素地址
*s.end(); // 返回set中最后一个元素地址
s.clear(); // 清空s
s.erase(s.begin()); // 删去某个特定的元素
s.erase(1); // 删去某个特定的元素
s.max_size(); // s最大能存元素的数目
set<int>::iterator iter; // 迭代器
s.rbegin(); // 逆向的第一个地址
s.rend(); // 逆向的最后一个地址的后一位
map<int, string> mp; // 键,值
mp[1] = "student_one"; // 插入一组映射关系
string s = mp[1] // 可以直接通过key访问value
map<int, string>::iterator iter = mp.find(1); // 迭代器
mp.erase(iter); // 迭代器删除
int n = mp.erase(1); // 如果删除了会返回1,否则返回0
mp.erase(mp.begin(), mp.end());// 删除区间是一个前闭后开的集合
遍历:
for (iter = mp.begin(); iter != mp.end(); iter++)
cout << iter->first << " " << iter->second << endl;
P761【入门】明明的随机数
#include<bits/stdc++.h>
#include<set>
using namespace std;
typedef long long LL;
int main() {
int n, x; cin>>n;
set<int> s;
while(n--) {
cin>>x;
s.insert(x);
}
cout<<s.size()<<endl;
// 1. 迭代器遍历
set<int>::iterator it = s.begin();
for( ; it!=s.end(); it++) cout<< *it<<" ";
cout<<endl;
// 2. for each : -std=C++14
// for(auto u : s) cout<<u<<" "; cout<<endl;
// for(int u : s) cout<<u<<" "; cout<<endl;
return 0;
}
P760 [NOIP2007 提高组] 统计数字
#include<bits/stdc++.h>
#include<set>
using namespace std;
typedef long long LL;
const int N=1e8+10;
map<int,int> st;
int main() {
int n,x; cin>>n;
for(int i=1; i<=n; i++){
cin>>x;
st[x] ++;
}
// 1.iterator
// map<int,int>::iterator it=st.begin();
// for(; it!=st.end(); it++){
// cout<<it->first<<" "<<it->second<<endl;
// }
// 2.for each
for(auto it:st){
cout<<it.first<<" "<<it.second<<endl;
}
return 0;
}
fill, memset
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10, INF = 0x3f3f3f3f;
int main() {
int n = 5;
int a[n];
memset(a, 0x3f, sizeof(a)); // 1061109567 1061109567 ...
for (int i = 0; i < n; i++) cout << a[i] << " ";
cout << endl;
fill(a, a + n, 2); // 2 2 2 2 2
for (int i = 0; i < n; i++) cout << a[i] << " ";
cout << endl;
vector<int> v(n);
fill(v.begin(), v.end(), 1); // 1 1 1 1 1
for (int i = 0; i < n; i++) cout << v[i] << " ";
cout << endl;
return 0;
}
题目
- 状态
- 已结束
- 题目
- 16
- 开始时间
- 2023-10-20 0:00
- 截止时间
- 2023-11-27 23:59
- 可延期
- 24 小时