XP03B笔记!!!
2025-08-19 11:29:18
发布于:广东
观前笔记
类
构造函数
一个形如class A{...};
的类,构造函数格式如:
class A{
private:
string name;
//注意构造函数需要在public
public:
A(string _name){//构造函数
name=_name;
}
};
构造函数的特点:
- 无返回值
- 如果没有定义,C++会使用默认的构造函数
析构函数
析构函数在对象生命周期结束时自动调用,用于释放对象调用的资源。
依旧有一个类A:
class A{
private:
string name;
int* p;
//注意构造函数需要在public
public:
A(string _name){//构造函数
name=_name;
p = new int;
}
~A(){//析构函数,以~开头
delete p;//释放空间
}
};
如果不手写这个函数,c++会提供默认的析构函数。
当然这样就不会处理指针了。
复制构造函数
还是一个类A。
class A{
private:
string name;
int* p;
//注意构造函数需要在public
public:
A(string _name,int i){//构造函数
name=_name;
p = new int(i);
}
~A(){//析构函数,以~开头
delete p;//释放空间
}
A(const A & other){//复制构造函数,参数为一个引用
name=other.name;
p=new int(*(other.p));//防止re崩堆
}
};
为什么复制构造函数使用常量引用?
- 常量---保护复制的对象不被修改
- 引用---减少赋值开销
注意,在复制构造函数涉及指针时,建议只复制指针指向地址存储的值。
完整演示:
这里为了演示,同时增加一个函数print来输出数值。
#include<bits/stdc++.h>
using namespace std;
class A{
private:
string name;
int* p;
//注意构造函数需要在public
public:
A(string _name,int i){//构造函数
name=_name;
p = new int(i);
}
~A(){//析构函数,以~开头
delete p;//释放空间
}
A(const A & other){//复制构造函数,参数为一个引用
name=other.name;
p=new int(*(other.p));//防止一些奇怪的bug
}
void print(){
cout << name << ' ' << *p << p << endl;//输出值
}
};
int main(){
//A a;//此处因为定义了构造函数,不会调用默认函数,于是报错
int i = 114514;
A b("str",i);//使用带参数的构造函数
//b:name = "str",p=&i
b.print();
A c(b);//使用复制构造函数
//c:name = "str",p=&i
c.print();
}//a,b,c生命周期结束,~A自动调用释放p
运行结果:
不注释
A a
:
(因为定义的构造函数有参数(string,int)
)
前缀和
模板
一维
#include<bits/stdc++.h>
using namespace std;
int n,a[114514],s[114514],q;
int main(){
cin >> n;
for(int i = 1;i <= n;i++){
cin >> a[i];
s[i] = s[i - 1] + a[i];
}
cin >> q;
while(q--){
int l,r;cin >> l >> r;
cout << s[r] - s[l - 1] << endl;
}
}
二维
#include<bits/stdc++.h>
using namespace std;
int n,m,q,a[1145][1145],s[1145][1145];
int main(){
cin >> n >> m >> q;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
cin >> a[i][j];
s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j];
}
}
while(q--){
int x1,y1,x2,y2;cin >> x1 >> y1 >> x2 >> y2;
cout << s[x2][y2] - s[x2][y1-1] - s[x1-1][y2] + s[x1-1][y1-1] << endl;
}
}
数与堆
大/小顶堆
priority_queue<int,vector<int>,greater<int> >q1;//大顶堆
priority_queue<int,vector<int>,less<int> >q1;//大顶堆
应用于结构体:增加operator
struct E{
int val,idx;
bool operator < (const E& other) const{
return val<other.val;
}
bool operator > (const E& other) const{
return val>other.val;
}
};
priority_queue<E,vector<E>,greater<E> >q1;
priority_queue<E,vector<E>,less<E> >q2;
动态规划
01背包
一个背包,最多装下质量为的物品。
现在有个物品,第个物品价值,重,求最大价值
1.表示在前个物品,背包容量时的最大价值
2.答案
3.
模板:
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
dp[i][j]=dp[i-1][j];
if(j>=v[i]){
dp[i][j] = max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]);//转移方程
}
}
}
完全背包
一个背包,最多装下质量为的物品。
现在有种物品(每种物品质量不限),第个物品价值,重,求最大价值
for(int i = 1;i <= n;i++){
for(int j = 0;j <= m;j++){
for(int k = 0;k <= j / v[i];k++){
dp[i][j] = max(dp[i-1][j-k*v[i]]+w[i]*k,dp[i][j]);//k表示拿k个
}
}
}
优化版模板
for(int i = 1;i <= n;i++){
for(int j = v[i];j <= m;j++){
dp[j] = max(dp[j-v[i]]+w[i],dp[j]);//k表示拿k个
}
}
在DEV测试运行时间
老版本
#include<ctime>
#include<iostream>
using namespace std;
int main(){
clock_t start = clock();
//在这里写代码
clock_t end = clock();
double dur = (double)(end-start)/CLOCKS_PER_SEC;//每秒滴答数
cout << dur;//秒
}
新版本(更稳定,需要手动调整至C++11标准)
调整方法:工具-编译器选项-代码生成/优化-代码生成-语言标准-GNU/ISO C++11
#include<iostream>
#include<chrono>
using namespace chrono;
using namespace std;
int main(){
auto start=steady_clock::now();
//这里写代码
auto end=steady_clock::now();
cout << duration<double>(end-start).count();
}
每秒滴答数这个概念可能mc玩家比较好理解,近似于游戏刻
杂项
端口号
不同软件和协议 | FTP | HTTP | HTTPS | MySQL |
---|---|---|---|---|
默认端口 | 21 | 80 | 443 | 3306 |
老师居然在初赛题库里塞这个吗有意思
排列组合
个元素的全排列个数为:
错排问题:
XP03B-1日志
8/15
一堆人在教室唱海阔天空。
8/17
神人
断句版本
啊啊啊,宝宝,你是一个香香软软、甜甜糯糯、蜂蜜奶油、甜甜腻腻、酥酥脆脆、滑滑嫩嫩、绵绵密密、弹弹润润、丝丝滑滑、蓬蓬松松、香香甜甜、油油润润、细细软软、密密实实、润润甜甜、酥酥软软、嫩嫩滑滑、松松软软、甜甜蜜蜜、细细绵绵、香香浓浓、弹弹嫩嫩、入口即化、弹牙有嚼劲的牛肉、鸡肉、羊肉、猪肉、鸭肉、北京烤鸭、老北京豆汁、老北京鸡肉卷、番茄炒饭、番茄炒肉、番茄炒鸡蛋、番茄炒米粉、番茄炒米线、番茄炒汉堡、番茄炒可乐、番茄炒科比、草莓、蓝莓、苹果、香蕉、葡萄、香香甜甜、酸酸甜甜、辣辣爽爽、咸咸鲜鲜、苦苦甘甘、滑滑嫩嫩、酥酥脆脆、软软绵绵、弹弹润润、油油腻腻、清清爽爽、浓浓醇醇、淡淡幽幽、热热乎乎、冰冰凉凉、黏黏糊糊、爽爽脆脆、鲜鲜嫩嫩、辣辣麻麻、苦苦辣辣、苹果、香蕉、橙子、草莓、葡萄、西瓜、樱桃、菠萝、猕猴桃、蓝莓、桃子、梨、杏、李子、西红柿、黄瓜、胡萝卜、生菜、菠菜、花椰菜、卷心菜、洋葱、大蒜、土豆、红薯、南瓜、玉米、豌豆、扁豆、红豆、绿豆、黄豆、黑豆、鸡蛋、牛奶、奶酪、酸奶、黄油、面包、面条、米饭、燕麦、玉米片、饼干、蛋糕、巧克力、冰淇淋、糖果、花生、腰果、杏仁、核桃、榛子、松子、芝麻、蜂蜜、果酱、番茄酱、芥末酱、油醋橄榄油、菜籽油、葵花籽油、鱼、虾、蟹、龙虾、贝类、牛肉、羊肉、猪肉、鸡肉、鸭肉、鹅肉、火鸡肉、香肠、火腿、培根、肉丸、汉堡、热狗、披萨、寿司、拉面、咖喱炖肉、烤肉、烤鱼、烤鸡、沙拉、汤、粥、蒸蛋、豆腐、豆浆、豆奶、豆腥草、豆皮、豆干、芒果、柠檬、柚子、金桔、百香果、火龙果、牛油果、无花果、荔枝、龙眼、枇杷、山楂、桑葚、甜瓜、哈密瓜、甜菜根、莴苣、茼蒿、芥蓝、芹菜、荠菜、苋菜、意式烤蔬菜配香草酱和橄榄油、鲜美多汁、香脆可口、滑嫩浓郁、醇厚甘甜、爽口香辣、酸甜苦辣、咸香酥软、糯滑爽、劲道鲜美、清香扑鼻、诱人、色泽鲜艳、香气扑鼻、口感丰富、层次分明、风味独特、香气四溢、回味无穷、色香味俱佳、口感细腻、肉质鲜嫩、色泽金黄、外酥里嫩、香气浓郁、味道鲜美、口感滑嫩、味道醇厚、味道独特、风味独特、香气诱人、口感鲜美、味道浓郁、口感丰富、味道鲜美、味道醇厚、味道独特、香气扑鼻
断句版本
啊啊啊,宝宝,你是一个香香软软、甜甜糯糯、蜂蜜奶油、甜甜腻腻、酥酥脆脆、滑滑嫩嫩、绵绵密密、弹弹润润、丝丝滑滑、蓬蓬松松、香香甜甜、油油润润、细细软软、密密实实、润润甜甜、酥酥软软、嫩嫩滑滑、松松软软、甜甜蜜蜜、细细绵绵、香香浓浓、弹弹嫩嫩、入口即化、**弹牙有嚼劲**的牛肉、鸡肉、羊肉、猪肉、鸭肉、北京烤鸭、老北京豆汁、老北京鸡肉卷、番茄炒饭、番茄炒肉、番茄炒鸡蛋、番茄炒米粉、番茄炒米线、**番茄炒汉堡**、**番茄炒可乐**、**番茄炒科比**、草莓、蓝莓、苹果、香蕉、葡萄、香香甜甜、酸酸甜甜、辣辣爽爽、咸咸鲜鲜、苦苦甘甘、滑滑嫩嫩、酥酥脆脆、软软绵绵、弹弹润润、油油腻腻、清清爽爽、浓浓醇醇、淡淡幽幽、热热乎乎、冰冰凉凉、黏黏糊糊、爽爽脆脆、鲜鲜嫩嫩、辣辣麻麻、苦苦辣辣、苹果、香蕉、橙子、草莓、葡萄、西瓜、樱桃、菠萝、猕猴桃、蓝莓、桃子、梨、杏、李子、西红柿、黄瓜、胡萝卜、生菜、菠菜、花椰菜、卷心菜、洋葱、大蒜、土豆、红薯、南瓜、玉米、豌豆、扁豆、红豆、绿豆、黄豆、黑豆、鸡蛋、牛奶、奶酪、酸奶、黄油、面包、面条、米饭、燕麦、玉米片、饼干、蛋糕、巧克力、冰淇淋、糖果、花生、腰果、杏仁、核桃、榛子、松子、芝麻、蜂蜜、果酱、番茄酱、芥末酱、油醋橄榄油、菜籽油、葵花籽油、鱼、虾、蟹、龙虾、贝类、牛肉、羊肉、猪肉、鸡肉、鸭肉、鹅肉、火鸡肉、香肠、火腿、培根、肉丸、汉堡、热狗、披萨、寿司、拉面、咖喱炖肉、烤肉、烤鱼、烤鸡、沙拉、汤、粥、蒸蛋、豆腐、豆浆、豆奶、豆腥草、豆皮、豆干、芒果、柠檬、柚子、金桔、百香果、火龙果、牛油果、无花果、荔枝、龙眼、枇杷、山楂、桑葚、甜瓜、哈密瓜、甜菜根、莴苣、茼蒿、芥蓝、芹菜、荠菜、苋菜、意式烤蔬菜配香草酱和橄榄油、鲜美多汁、香脆可口、滑嫩浓郁、醇厚甘甜、爽口香辣、酸甜苦辣、咸香酥软、*糯滑爽*、劲道鲜美、清香扑鼻、诱人、色泽鲜艳、香气扑鼻、口感丰富、层次分明、风味独特、香气四溢、回味无穷、色香味俱佳、口感细腻、肉质鲜嫩、色泽金黄、外酥里嫩、香气浓郁、味道鲜美、口感滑嫩、味道醇厚、味道独特、风味独特、香气诱人、口感鲜美、味道浓郁、口感丰富、味道鲜美、味道醇厚、味道独特、香气扑鼻
全部评论 4
eaaaaaaaaaa!
1周前 来自 广东
02025-08-15 来自 广东
0视奸你
2025-08-17 来自 广东
0
可以可以
2025-08-15 来自 广东
0合理评价
2025-08-16 来自 广东
0
vo din!
2025-08-15 来自 广东
0
有帮助,赞一个