作业介绍

二阶(上)练习:

  • 字符串
  • 数学思维
  • 二进制
  • 筛素数
  • 位运算

2023年10月20日_作业解析1

2023年11月11日_set、map作业解析2

2023年11月11日课程内容:set,map,vector,sort,lower_bound,upper_bound,memset,fill,next_permutation

3.4STL

作业觉得掌握好了的同学,可以在这个STL的题单中练习

最后面加入了今年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 小时