准备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)蓝桥杯的主要内容,如果未能解决你的问题,请参考以下文章

新人问下怎么准备蓝桥杯啊,该怎么准备

蓝桥杯c语言和java哪个好考

C/C++蓝桥杯1 备赛准备

2023年第十四届蓝桥杯将至来看看第十二届蓝桥杯javaB组题目如何

零基础准备蓝桥杯

蓝桥杯c++省三需要多久