• 个人简介

    #坤坤

    hahahahahahahahahahahahahaah

    学校:重庆第一双语中学

    班级:7年级11班

    CSP考点

    排序算法

    计算机单位

    ‌位(bit)‌:位是计算机中最小的存储单位,每一个位存储一个二进制码,即0或1。

    ‌‌字节(Byte)‌:字节由8个位组成,是计算机的基本存储单位。一个字节可以表示256个不同的值(0000 0000到1111 1111),通常用于表示一个字符。

    ‌字(‌Word)‌:字通常由16、32或64个位组成,用于表示更大的数据块。

    ‌‌千字节(KB)‌:1千字节等于1024字节

    ‌‌兆字节(MB)‌:1兆字节等于1024千字节

    ‌‌吉字节(GB)‌:1吉字节等于1024兆字节

    ‌‌太字节(TB)‌:1太字节等于1024吉字节

    计算机进制转换

    二转八:三位一组转十进制

    二转十六:四位一组转十进制

    N转十进制:及你太美

    N进制小数

    数据结构

    常用的线性结构有:线性表,栈,队列,双队列,串(一维数组)。

    关于广义表、数组(高维),是一种非线性的数据结构。

    常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图

    鸡汤来咯

    /*在女同学面前装X:基数排序,时间复杂度o(n+k),空间复杂度o(n)*/
    #include<bits/stdc++.h>
    using namespace std;
    int mkc[114514];
    int main(){
    	int n,LAL;
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i){
    		scanf("%d",&LAL);
    		mkc[LAL]++;
    	}
    	for(int i=1;i<=114514;++i){
    		if(mkc[i]){
    			while(mkc[i]--) printf("%d ",i);
    		}
    	}
    	return 0;
    }
    
    //装逼哥:快速幂
    #include<bits/stdc++.h>
    using namespace std;
    int p;
    long long a,b;
    long long mkc(long long a,long long b){
    	if(b==0) return 1;
    	if(b%2==0) return mkc(a*a%p,b/2)%p;
    	else{
    		return a*mkc(a,b-1)%p;
    	}
    }
    int main(){
    	cin>>a>>b>>p;
    	cout<<a<<"^"<<b<<" mod "<<p<<"="<<mkc(a,b);
    }
    
    //深度优先搜索
    //我是傻逼(mkh)来装逼了
    #include<bits/stdc++.h>
    using namespace std;
    char mat[505][505];
    int vis[505][505];
    int n,m,flag=0;;
    int dx[4]={1,0,-1,0};
    int dy[4]={0,1,0,-1};
    void dfs(int x,int y){
        vis[x][y]=1;
        if(mat[x][y]=='g'){
            flag=1;
            return;
        }
        for(int i=0;i<4;++i){
            int tx=x+dx[i];
            int ty=y+dy[i];
            if(mat[tx][ty]=='#') continue;
            if(tx>n||ty>m||tx<1||ty<1) continue;
            if(vis[tx][ty]==1) continue;
            dfs(tx,ty);
        }
    }
    int main(){
        int a,b;
        cin>>n>>m;
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                cin>>mat[i][j];
                if(mat[i][j]=='s'){
                    a=i;b=j;
                }
            }
        }
        dfs(a,b);
        if(flag) cout<<"Yes";
        else cout<<"No";
    }
    
    #include<bits/stdc++.h>
    #include<windows.h>
    using namespace std;
    int Count=0;
    int Question_Answer(int cnt){
    	int Ua;
    	if(cnt){
    		printf("=============================================\n");
    		printf("           嗨,我的朋友,好久不见\n");
    		printf("=============================================\n");
    		Sleep(3000);
    		system("cls");
    	}
    	printf("=============================================\n");
    	printf("          想玩游戏吗?\n");
    	printf("        你可以说出你的需求:\n");
    	Sleep(500);
    	printf("        1:猜数字\n");
    	Sleep(500);
    	printf("        2:博弈\n");
    	Sleep(500);
    	printf("        3:走迷宫\n");
    	Sleep(500);
    	printf("        4:生日\n");
    	Sleep(500);
    	printf("        5:排序\n");
    	Sleep(500);
    	printf("=============================================\n");
    	printf("请输入:");
    	scanf("%d",&Ua);
    	printf("\n");
    	return Ua;
    }
    int main(){
    	Count=1;
    	while(1){
    		int G_Answer=Question_Answer(Count);
    		Count=0;
    		system("cls");
    		printf("好的,请稍等");
    		int CNT=0;
    		for(int i=1;i<=9;++i){
    			CNT++;
    			printf(".");
    			Sleep(1000);
    			if(CNT==3){
    				system("cls");
    				printf("好的,请稍等.");
    				Sleep(1000);
    				CNT=1;
    			}
    		}
    		system("cls");
    		/*switch(G_Answer){
    			case 1
    				break;
    			case 2
    				break;
    			case 3
    				break;
    			case 4
    				break;
    			case 5
    				break;
    		}*/
    	}
    }
    

    人机集训

    cin 慢 50万以下用

    用scanf/关流:ios::sync_with_stdio(flase)

    cin,tie(0);

    cout,tie(0);

    警告:关流情况下,不能混用cin和scanf

    #include<bits/stdc++.h>
    using namespace std;
    int x[20],y[20],vis[20];
    int n;
    double dis(int s,int e){
        return sqrt((x[s]-x[e])*(x[s]-x[e])+(y[s]-y[e])*(y[s]-y[e]));
    }
    double ans=1e9;
    void dfs(int x,double s,int y){
        for(int i=1;i<=n;++i){
            if(x>n){
                ans=min(ans,s);
                return;
            }
            if(s>ans) return;
            if(vis[i]==1) continue;
            vis[i]=1;
            dfs(x+1,s+dis(y,i),i);
            vis[i]=0;
        }
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            scanf("%d %d",&x[i],&y[i]);
        }
        dfs(1,0,0);
        printf("%.2lF",ans);
    }
    
    //并查集
    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    int p[100010];
    int find(int x){
    	if(x!=p[x]) p[x]=find(p[x]);
    	return p[x];
    }
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;++i) p[i]=i;
    	for(int i=1;i<=m;++i){
    		int x,y,z;
    		cin>>z>>x>>y;
    		if(z==1){
    			int px=find(x),py=find(y);
    			p[px]=py;
    		}
    		else{
    			int px=find(x),py=find(y);
    			if(px==py) cout<<"Y\n";
    			else cout<<"N\n";
    		}
    	}
            return 0;
    }
    
    //代数并查集
    #include<bits/stdc++.h>
    using namespace std;
    int m;
    int siz[30010],d[30010],p[30010];
    int find(int x){
    	if(x!=p[x]){
    		int tmp=find(p[x]);
    		d[x]+=d[p[x]];
    		p[x]=tmp;
    	}
    	return p[x];
    }
    int main(){
    	for(int i=1;i<=30000;++i){
    		siz[i]=1;
    		p[i]=i;
    	}
    	cin>>m;
    	for(int i=1;i<=m;++i){
    		char op;
    		int a,b;
    		scanf(" %c %d %d",&op,&a,&b);
    		if(op=='M'){
    			int pa=find(a),pb=find(b);
    			d[pa]=siz[pb];
    			p[pa]=pb;
    			siz[pb]+=siz[pa];
    		}
    		else{
    			int pa=find(a),pb=find(b);
    			if(pa==pb) cout<<abs(d[a]-d[b])-1<<"\n";
    			else cout<<-1<<"\n";
    		}
    	}
            return 0;
    }
    
    //st表
    #include<bits/stdc++.h>
    using namespace std;
    int st[100010][20];
    int n,m;
    int main(){
    	scanf("%d %d",&n,&m);
    	for(int i=1;i<=n;++i) scanf("%d",&st[i][0]);
    	for(int i=1;i<=16;++i){
    		for(int j=1;j+(1<<i)-1<=n;++j){
    			st[j][i]=max(st[j][i-1],st[j+(1<<i-1)][i-1]);
    		}
    	}
    	for(int i=1;i<=m;++i){
    		int l,r;
    		scanf("%d %d",&l,&r);
    		int t=__lg(r-l+1);
    		printf("%d\n",max(st[l][t],st[r-(1<<t)+1][t]));
        }
    }
    
    //差分
    #include<bits/stdc++.h>
    using namespace std;
    int c[100010];
    int main(){
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;++i) cin>>c[i];
    	for(int i=n;i>=2;--i) c[i]-=c[i-1];
    }
    //修改 c[l]+=d c[r]-=d
    
    //前缀和
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int lowbit(int x){
    	return x&-x;
    }
    long long tr[100005];
    long long sum(int x){
    	long long res=0;
    	for(int i=x;i;i-=lowbit(i)) res+=tr[i];
    	return res;
    }
    void add(int d,int x){
    	for(int i=d;i<=n;i+=lowbit(i)) tr[i]+=x;
    }
    int main(){
    	int q;
    	cin>>n>>q;
    	for(int i=1;i<=n;++i){
    		int x;
    		cin>>x;
    		add(i,x);
    	}
    	while(q--){
    		int l,r;
    		cin>>l>>r;
    		cout<<sum(r)-sum(l-1)<<endl;
    	}
        return 0;
    }
    
    //我是傻逼(mkh)来装逼了
    #include<bits/stdc++.h>
    using namespace std;
    char mtr[505][505];
    int vis[505][505];
    int dx[5]={0,1,0,-1};
    int dy[5]={1,0,-1,0};
    int n,m;
    struct p{
    	int x,y;
    };
    int bfs(int a,int b){
    	queue<p> que;
        que.push({a,b});
    	vis[a][b]=1;
    	while(!que.empty()){
    		p now=que.front();
            que.pop();
            if(mtr[now.x][now.y]=='T'){
                return vis[now.x][now.y];
            }
            for(int i=0;i<4;++i){
                int tx=now.x+dx[i];
                int ty=now.y+dy[i];
                if(mtr[tx][ty]=='X') continue;
                if(tx>n||ty>m||tx<1||ty<1) continue;
                if(vis[tx][ty]>=1) continue;
                vis[tx][ty]=vis[now.x][now.y]+1;
                que.push({tx,ty});
            }
    	}
        return 0;
    }
    int main(){
    	cin>>n>>m;
    	int a,b;
    	for(int i=1;i<=n;++i){
    		for(int j=1;j<=m;++j){
    			cin>>mtr[i][j];
    			if(mtr[i][j]=='S'){
    				a=i;b=j;
    			}
    		}
    	}
        int u=bfs(a,b);
        if(u) cout<<u;
        else cout<<-1;
    }
    
    //逆序对
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int lowbit(int x){
    return x&-x;
    }
    long long tr[1000005];
    int sum(int x){
    int res=0;
    for(int i=x;i;i-=lowbit(i)) res+=tr[i];
    return res;
    }
    void add(int d,int x){
    for(int i=d;i<=1000000;i+=lowbit(i)) tr[i]+=x;
    return;
    }
    int main(){
    long long ans=0;
    cin>>n;
    for(int i=1;i<=n;++i){
    int x;
    cin>>x;
    ans+=sum(1000000)-sum(x);
    add(x,1);
    }
    cout<<ans;
    
    #include<bits/stdc++.h>
    using namespace std;
    char mat[505][505];
    int vis[505][505];
    int dx[4] = {1,0,-1,0};
    int dy[4] = {0,1,0,-1};
    int n,m;
    struct point{
    	int x,y;
    };
    void bfs(int sx,int sy){
    	queue<point> que;
    	vis[sx][sy]=1; //起点标记
    	que.push({sx,sy}); //起点打包入队
    	while(!que.empty()){
    		point p=que.front(); //获取队首元素
    		que.pop();
    		if(mat[p.x][p.y] == 'T'){
    			cout<<vis[p.x][p.y]; //找到终点输出终点的步数 
    			return;
    		} 
    		for(int i=0;i<4;i++){
    			int tx=p.x+dx[i];
    			int ty=p.y+dy[i];
    			if(tx>n||tx<1||ty>m||ty<1) continue;
    			if(mat[tx][ty]=='X') continue;
    			if(vis[tx][ty]!=0) continue;
    			que.push({tx,ty}); //将新的点加入队列,等着后面走 
    			vis[tx][ty]=vis[p.x][p.y]+1;
    			//新的点步数 是 来源点步数+1 
    		} 
    	} 
    	cout<<-1; 
    } 
    int main(){
    	cin>>n>>m;
    	int sx,sy;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			cin>>mat[i][j];
    			if(mat[i][j]=='S'){
    				sx=i;
    				sy=j;
    			}
    		}
    	}
    	bfs(sx,sy);
    	return 0;
    }
    
  • 通过的题目

  • 最近活动

题目标签

初窥门径
34
顺序结构
25
略有小成
10
分支结构
9
排序
9
一本通编程启蒙
9
驾轻就熟
7
循环结构
5
蓝桥杯
5
月赛语法
4
一维数组
3
其他
3
融会贯通
3
模拟
3
图论
3
循环嵌套
2
字符串
2
计数排序
2
GESP四级
2
BFS
1