C++部分知识
自定义变量类型:
typedef long long LL;//自定义一个变量类型
LL ans;//用LL类型创建一个变量
打印
endl 意为end line,有以下两个作用:
①换行;
②对缓冲流进行冲刷,使得流中所有剩余字符被写入输出序列。
也即加<<endl后会有一个换行。下次再用cout输出字符时就会在下一行开始输出,如果不加,就会跟在当前行的最后输出。
using namespace std;
cout<<" "<<z<<endl;
保留小数问题
#include<iostream>
#include<iomanip>//必要头文件
using namespace std;
int main()
{
double sum;
sum=4.56789;
cout<<"方法一:保留两位小数"<<endl;
//第一种方法也是最常用的方法
cout<<fixed<<setprecision(2)<<sum<<endl;
cout<<"方法二:保留三位小数"<<endl;
cout.setf(ios::fixed);
cout<<setprecision(3)<<sum<<endl;
cout<<"方法三:保留四位小数"<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<sum<<endl;
cout<<"方法四:保留六位小数"<<endl;
cout<<setprecision(6)<<sum<<endl;
return 0;
}
万能库
#include<bits/stdc++.h> :包含了c++绝大多数的库,节省大量时间,很方便
math库
- 在竞赛中有大量计算需要用到math库中的函数,以下是一些常用函数的总结
四舍五入
ceil(x) x上取整函数
floor(x) x的下取整函数
fmod(y, x) y/x的余数
round(x) x的四舍五入值
绝对值
fabs(x) x的绝对值函数
abs(x) x的绝对值
fmax(x, y) 两个参数中的最大值 (The maximum numeric value of its arguments. Values among which the function selects a maximum )
fmin(x, y) 两个参数中的最小值
幂函数
pow(base, power) 幂函数 The result of raising base to the power exponent
sqrt(x) 计算x的平方根
cbrt(x) 计算x的立方根
对数函数
log(x) x的自然对数 (Natural logarithm of x)
提升效率代码
这两串代码可以提升c++运行效率,节省时间
ios::sync_with_stdio(0);
cin.tie(0);
vector容器(相当于集合一类)
vector详解:
empty()可以判断vector是否为空
push_back()每次会添加一个元素到vector的末尾
begin():返回向量头指针,指向第一个元,如果要取第一位数需要加个,比如:变量名.beign()才是集合中的第一位数。
back():返回尾元素的引用
clear():清空向量中所有元素
max_size() const:返回最大可允许的 vector 元素数量值
————————————————
版权声明:本文为CSDN博主「~不羁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_62870588/article/details/123710633
取得一串数字头尾数字,以及14届蓝桥杯B组D题有感
int A;cin>>A;//目标数字
vector<int> d;//创建集合,取得一个数字的头尾两数
while(A){
d.push_back(A%10);//取得末尾个位数,每次循环将上一位数存入集合末尾,存到最后一位数就是第一个数字
A/=10;
}
int first=d.back(), last=*d.begin();
- 蓝桥杯E题详解
【问题描述】
对于一个长度为 K 的整数数列:A1, A2, . . . , AK,我们称之为接龙数列当且
仅当 Ai 的首位数字恰好等于 Ai−1 的末位数字 (2 ≤ i ≤ K)。
例如 12, 23, 35, 56, 61, 11 是接龙数列;12, 23, 34, 56 不是接龙数列,因为 56
的首位数字不等于 34 的末位数字。所有长度为 1 的整数数列都是接龙数列。
现在给定一个长度为 N 的数列 A1, A2, . . . , AN,请你计算最少从中删除多少
个数,可以使剩下的序列是接龙序列?
【输入格式】
第一行包含一个整数 N。
第二行包含 N 个整数 A1, A2, . . . , AN。
【输出格式】
一个整数代表答案。
【样例输入】
5
11 121 22 12 2023
【样例输出】
1
【样例说明】
删除 22,剩余 11, 121, 12, 2023 是接龙数列。
#include<bits/stdc++.h>
using namespace std;
int N;
long int N_max=1e6;
int dp[10];
int main(){
ios::sync_with_stdio(0);cin.tie(0);//节省时间,提高运行效率的代码
cin>>N;
for(int i=0;i<N;i++){
int A;cin>>A;
vector<int> d;
while(A){
d.push_back(A%10);
A/=10;
}
int first=d.back(), last=*d.begin();
dp[last]=max(dp[last],dp[first]+1); //奇特解题思路,每次让第Ai个数比较其高位与上一位数得低位,如果相同就加一,最后得合即为符合条件得数字。用全部得数字减去这个合即为不符合条件得数字得个数。
}
int len=0;
for(int i=0;i<10;i++) len=max(len,dp[i]);
cout<<N-len;
return 0;
}
14届蓝桥杯G字串简写题收获:C++对字符串的操作,以及该题思考方式
C++字符串知识:
string S;//创建字符串
S.size()//返回字符串的长度。
S[]//可以用下标操作字符串
- G题详解:
程序猿圈子里正在流行一种很新的简写方法:对于一个字符串,只保留首
尾字符,将首尾字符之间的所有字符用这部分的长度代替。例如 internationalization 简写成 i18n,Kubernetes (注意连字符不是字符串的一部分)简
写成 K8s, Lanqiao 简写成 L5o 等。
在本题中,我们规定长度大于等于 K 的字符串都可以采用这种简写方法
(长度小于 K 的字符串不配使用这种简写)。
给定一个字符串 S 和两个字符 c1 和 c2,请你计算 S 有多少个以 c1 开头
c2 结尾的子串可以采用这种简写?
【输入格式】
第一行包含一个整数 K。
第二行包含一个字符串 S 和两个字符 c1 和 c2。
【输出格式】
一个整数代表答案。
【样例输入】
4
abababdb a b
【样例输出】
6
【样例说明】
符合条件的子串如下所示,中括号内是该子串:
试题G: 子串简写 13
第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组
[abab]abdb
[ababab]db
[abababdb]
ab[abab]db
ab[ababdb]
abab[abdb]
【评测用例规模与约定】
对于 20% 的数据,2 ≤ K ≤ |S | ≤ 10000。
对于 100% 的数据,2 ≤ K ≤ |S | ≤ 5 × 105。S 只包含小写字母。c1 和 c2 都
是小写字母。
|S | 代表字符串 S 的长度。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
string S;
int K;
char c1,c2;
int main(){
cin>>K>>S>>c1>>c2;
int n=S.size();
int sum=0;
LL ans =0;
for(int i=K-1,j=0;i<n;i++,j++){//for循环中,设置两个变量,两个变量之间有k-1个跨度,i寻找字符c2,j寻找字符c1
if(S[j]==c1){ //该题逆向思考,通过寻找c2(b),对应多少c1(a)
sum++; //当找到一个c1(a) 时,我们令sum++,当找到一个符合的c2(b) 时我们就将ans+=sum,意味着将当前这个b对应着的所有的a的个数收集起来,依次类推,每个b都是如此,我们便得到了结果ans
}
if(S[i]==c2){
ans+=sum;
}
}
cout<<ans;
return 0;
}