准备2023(2024)蓝桥杯
Posted 努力成长的小白鸭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了准备2023(2024)蓝桥杯相关的知识,希望对你有一定的参考价值。
前缀和
一维前缀和
s[i]=s[i-1]+a[i]
二维前缀和(子矩阵的和)
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j]
差分
一维数组
//b是差分数组
b[i]+=c;
b[j+1]-=c;
#include<iostream>
using namespace std;
int n,m;
int b[100002],a[100002];
void insert(int i,int j,int c)
b[i]+=c;
b[j+1]-=c;
int main()
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
insert(i,i,a[i]);
for(int i=1;i<=m;i++)
int l,r,c;
cin>>l>>r>>c;
insert(l,r,c);
for(int i=1;i<=n;i++)
a[i]=a[i-1]+b[i];
cout<<a[i]<<' ';
二维差分(差分矩阵)
b[x1][y1]+=c;
b[x2+1][y1]-=c;
b[x1][y2+1]-=c;
b[x2+1][y2+1]+=c;
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1e3 + 10;
int a[N][N], b[N][N];
void insert(int x1, int y1, int x2, int y2, int c)
b[x1][y1] += c;
b[x2 + 1][y1] -= c;
b[x1][y2 + 1] -= c;
b[x2 + 1][y2 + 1] += c;
int main()
int n, m, q;
cin >> n >> m >> q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
insert(i, j, i, j, a[i][j]); //构建差分数组
while (q--)
int x1, y1, x2, y2, c;
cin >> x1 >> y1 >> x2 >> y2 >> c;
insert(x1, y1, x2, y2, c);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
a[i][j] = a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1]+b[i][j]; //二维前缀和
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
printf("%d ", a[i][j]);
printf("\\n");
return 0;
字符串的操作STL
#include<string>
string s;
s.size();
s.length();
tolower(a);//将大写字母a,转换为小写字母,返回值是小写字母;a=tolower(a);
字符串
#include <iostream>
#include<algorithm>
#include<iomanip>
#include<string>
using namespace std;
string s[10];//可以读入二维的字符串
int main()
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>s[i];
for(int i=1;i<=n;i++)
cout<<s[i]<<endl;
模拟
模拟题可难也可简单,重点是 读懂题意,抽象出来模型(我这说的好像是废话 )
例题(简单)
#include <iostream>
#include<string>
using namespace std;
int n,m;
string a[102];
int d[8][2]=-1,1,1,-1,0,1,0,-1,1,1,-1,-1,1,0,-1,0;
int main()
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
int ans=0;
if(a[i][j]=='*')
cout<<a[i][j];
continue;
for(int k=0;k<8;k++)
if((i+d[k][0])>=0&&(i+d[k][0]<n)&&(j+d[k][1]>=0)&&j+d[k][1]<m&&a[i+d[k][0]][j+d[k][1]]=='*')
ans++;
cout<<ans;
cout<<endl;
return 0;
闰年的判断
bool is_leap(int n)
if((n%4==0&&n%100!=0)||(n%400==0))
return true;
return false;
高精度
高精度加法
#include <iostream>
#include<algorithm>
#include<iomanip>
#include<string>
#include<vector>
using namespace std;
vector<int>A,B,C;
string a,b;
void add()
int t=0;
for(int i=0;i<A.size()||i<B.size();i++)
if(i<A.size())
t+=A[i];
if(i<B.size())
t+=B[i];
C.push_back(t%10);
t=t/10;
if(t)
C.push_back(t);
int main()
cin>>a>>b;
for(int i=a.size()-1;i>=0;i--)
A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--)
B.push_back(b[i]-'0');
add();
for(int i=C.size()-1;i>=0;i--)
cout<<C[i];
高精度乘法
高精度乘低精度
#include <iostream>
#include<algorithm>
#include<iomanip>
#include<string>
#include<vector>
using namespace std;
vector<int>A,B,C;
string a;
int b;
void mul()
int t=0;
for(int i=0;i<A.size();i++)
t+=A[i]*b;
C.push_back(t%10);
t=t/10;
if(t)
C.push_back(t);
while(C.size()>1&&C.back()==0)
C.pop_back();//把前导零删除
int main()
cin>>a>>b;
for(int i=a.size()-1;i>=0;i--)
A.push_back(a[i]-'0');
mul();
for(int i=C.size()-1;i>=0;i--)
cout<<C[i];
高精度乘高精度
#include <iostream>
#include<algorithm>
#include<iomanip>
#include<string>
#include<vector>
using namespace std;
vector<int>A,B;
string a,b;
vector<int> mul()
vector<int>C(A.size()+B.size()+7,0);
int t=0;
for(int i=0;i<B.size();i++)
for(int j=0;j<A.size();j++)
C[i+j]+=B[i]*A[j];
for(int i=0;i<C.size();i++)
t+=C[i];
C[i]=t%10;
t/=10;
if(t)
C.push_back(t);
while(C.size()>1&&C.back()==0)
C.pop_back();
return C;
int main()
cin>>a>>b;
for(int i=a.size()-1;i>=0;i--)
A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--)
B.push_back(b[i]-'0');
auto C=mul();
for(int i=C.size()-1;i>=0;i--)
cout<<C[i];
数学知识
卡特兰数
C0 = 1,
C1 = 1, C2 = 2, C3 = 5, C4 = 14, C5 = 42,
C6 = 132, C7 = 429, C8 = 1430, C9 = 4862, C10 = 16796,
C11 = 58786, C12 零基础准备蓝桥杯
作者现在大二,小小菜鸡一个,立志成为“卷中卷”,报名了四月份的蓝桥杯,零竞赛基础开始准备蓝桥杯。
来自室友icpc大佬的建议,先巩固C语言基础语法(刷洛谷的入门题单)--学习c++STL--acwing的算法基础课。
现写下文章来记录自己遗忘和不熟悉的知识,希望和各位准备竞赛的未来大佬共勉!!!
第一天
洛谷题单广场-[入门1]顺序结构
复习基础知识
1、单个字母转换-char string 的使用场景
char s; //string s
cin>>s; //强制类型转换
cout<<(char)(s-32);//cout<<(char)(s[0]-32);小写转大写
2、C语言中printf的各格式符的输出
printf各格式符 pritnf("%5d",n); 指定输出数据占5列,输出的数据显示在此5列的右侧 "%l5d" (长整型) "%ll5d"(双长整形) pritnf("%c",n); 输出单个字符 pritnf("%s",n); 输出一个字符串 pritnf("%f",n);; 输出实数(包括单、双精度、长双精度)以小数形式输出 ①小数部分6位②"%m.nf"指定数据宽度(向右对齐)和小数位数(四舍五入)③“%-m.nf”(向左对齐)数据向左靠,不足右端补空格 printf("%e/E",n); 指定以指数形式输出实数 printf("%e",123.456); 系统自动给出数字部分的小数位数位6位,指数部分占5列 1.234560e+002 printf("%13.2e",123.456)输出实数共占13列宽度 1.23e+002(数前面有4个空格)
新知识学习
超级玛丽游戏-c++中R的简单应用
#include<iostream>
int main()
//R"()"必须在同行--就不用每行加换行符和" "
std::cout<<R"( ********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
########################################## ############ )";
二刷题目
对角线--//注四个点确定一个交点
第二天
洛谷题单广场-[入门2]分支结构
复习基础知识
1、多个if与多个else if执行顺序
如果是多个else if的话,只要第一个if条件成立,即使满足else if的条件也不会执行else if及else的内容,
如果是多个if的话,最后的else会执行的;
else与最近的if匹配,包括else if 的if。
2、辗转相除法求公因子
int gcc(int x,int y)//辗转相除法求公因子
int z;
while(x%y!=0)
z=x%y;
x=y;
y=z;
return z;
3、数学知识 -三角形
a*a+b*b>c*c//为锐角三角形 a<b<c
a*a+b*b<c*c//为钝角三角形 a<b<c
以上是关于准备2023(2024)蓝桥杯的主要内容,如果未能解决你的问题,请参考以下文章