IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 第九届省赛蓝桥杯b组c++ -> 正文阅读

[数据结构与算法]第九届省赛蓝桥杯b组c++

🤞冲刺蓝桥 距离【第十三届蓝桥杯4月9日省赛】仅剩【04天】 🤞

📢今日题目:蓝桥杯真题

🍺刷题一览
请添加图片描述

往期文章推荐-------0基础算法系列

排序(十大排序)
高精度算法
从0->1入门双指针
前缀和
二分
位运算
区间合并

2019省赛b组c++

明码

在这里插入图片描述
10个汉字是 : 九的九次方等于多少?
答案: 387420489

#include<iostream>  
using namespace std;  
int main(){  
    int m,n;
	int w[16]; 
	while( cin>>m>>n ){
	   
        for(int i=7;i>=0;i--){
		    w[i]=m&1;
			m>>=1;
	    }  
        for(int i=15;i>=8;i--){
		    w[i]=n&1;
		    n>>=1;
	    }  
        for(int i=0;i<=15;i++){
		if( w[i] == 1 ) 
		    cout<<w[i];
		    else cout <<" ";   
		}   
		cout<<endl;  
    }  
}  

乘积为0

在这里插入图片描述
要想乘积为零的话,只有2和5才能出0.那么我们记录有多少个2和多少个5取最小值就行了。

#include<iostream>
#define ll long long
using namespace std;

int main()
{
	ll sum2=0;
	ll sum5=0;
	int x;
	for(int i=1;i<=100;i++)
	{
		cin>>x;
		while(x)
		{
			if(x%2==0) x/=2,sum2++;
			else break;
		}
		while(x)
		{
			if(x%5==0) x/=5,sum5++;
			else break;
		}
	}
	cout<<min(sum2,sum5)<<endl;
	return 0;
}

测试次数

在这里插入图片描述

假设 第 1 次随便随便选一层扔 ,选 第 层 碎了,碎了我也有2部手机不是,
那么 我此时想用两部手机测出 1~( -1)范围的耐摔指数就和上面情况一样的
最坏测试次数满足关系 k*(k+1)/2>=-1= -1 (同时保证 k+1<=K,=>k<=K-1注 :这是大 K )
若没碎就可以进行下一步
假设 第 2 次随便随便选一层扔 ,选第 层 碎了,碎了我也有2部手机不是,
那么 我此时想用两部手机测出 ( +1)~( -1)范围的耐摔指数就和上面情况一样的
最坏测试次数满足关系 k*(k+1)/2>=( ???????-1)- =???????- -1 (同时保证 k+1+1 <=K,
=>k<=K-2注 :这是大 K)
若没碎就可以进行下一步
假设 第 3 次随便随便选一层扔 ,选第 层 碎了,碎了我也有2部手机不是,
那么 我此时想用两部手机测出( +1)~( -1)范围的耐摔指数就和上面情况一样的

最坏测试次数满足关系 k*(k+1)/2>=( -1)-??????? =???????- ???????-1 (同时保证 k+1+1+1 <=K,===>k<=K-3注 :这是大 K)

假设 第 k次随便随便选一层扔 ,选第 层 碎了,那么只好 碎了我也有2部手机不是,
那么 我此时想用两部手机测出(???????+1)~( -1)范围的耐摔指数就和上面情况一样的
最坏测试次数满足关系 k*(k+1)/2>=( -1)-( ???????+1)=???????- ??????? -1(同时保证 k+1+1…+1 <=K,===>k<=K-K注 :这是大 K)
如法炮制 但是这里的小k 每行是不一样的所以要将他们 用大K 替换掉

                                  k*(k+1)/2>=-1= -1                    k<=K-1

                                  k*(k+1)/2>=( ???????-1)- =???????- -1      k<=K-2

                                  k*(k+1)/2>=( -1)- ??????? =???????- ???????-1       k<=K-3

                                                        ......

                                  k*(k+1)/2>=( -1)- ???????=???????- ??????? -1    k<=K-K 

         替换后:

                                   (K-1)*K/2>=-1= -1

                                    (K-2)*(K-1)/2>=( ???????-1)- =???????- -1

                                    (K-3)*(K-2)/2>=( -1)- ???????=???????- ???????-1

                                                               ......

                              (K-K)*(K-(K-1))/2>=( -1)- ???????=???????- ??????? -1

消消元: 1/2* [(K-1)K+ (K-2)(K-1)+(K-3)(K-2)…(K-K)(K-(K-1))]>=-K

配凑法: 1/2* [k2+(K-1)2+ (K-2)2+(K-3)2…(K-(k-1))^2]-[K+(K-1)+(K-2)+(k-3)…+(K-(K-1))]>=-K

          (同时增加减少 [K+(K-1)+(K-2)......(K-(K-1))]- [K+(K-1)+(K-2)......(K-(K-1))+(K-K)]  )

两边化简一下:1/2* [K2+(K-1)2+ (K-2)2+(K-3)2…1^2]-[K+(K-1)+(K-2)+(k-3)…+(K-(K-1))+(K-K)]>=-K

           ===>1/2* [K^2+(K-1)^2+ (K-2)^2+(K-3)^2......1^2]-[K*(K+1)-1-2-3.....-K]>=-K

根据平方求和公式 :

                  所以  原式等于 1/2*{   K*(K+1)(2K+1)/6 -[K*(K+1)-K*(K+1)/2]>=-K

                  ====>1/2*{   K*(K+1)(2K+1)/6 -[K*(K+1)-K*(K+1)/2]>=-K

                  ====> (K^3+5K)/6 >= ==1000

                  ====>  K=19

    于是就得到了 公式
#include<stdio.h>
int main(){
    int i;
      for(i=0;i<100;i++)
	   if((i*i*i+i*5)/6>=1000)break;
	   printf("%d\n",i);
	return 0;
} 

快速排序

在这里插入图片描述

a, i+1, r, k-(i-l+1)
注意时间复杂度的要求

递增三元组

在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;

//4
//1 3 4 5 
//1 2 2 2
//2 3 3 4

int a[100010];
int b[100010];
int c[100010];
int n;
long long ans = 0;

int main(){
    //输入数据 
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        cin>>b[i];
    }
    for(int i=1;i<=n;i++){
        cin>>c[i];
    }
    //排序 
    sort(a+1,a+n+1);
    sort(b+1,b+n+1);
    sort(c+1,c+n+1);
    
    //定义两个指针(下标) 
    int j = 1;
    int k = 1;
    //以b为中间值 在a数组 c数组中查找 
    for(int i=1;i<=n;i++){
		while(j<=n && a[j] < b[i]) j++; //在a数组中查找第一个大于等于b[i]的数 
		while(k<=n && c[k] <= b[i]) k++; //在c数组中查找第一个大于b[i]的数 
		ans += (long long)(j-1) * (n-k+1); //计算公式 可以自己举例推导出来 
    }
    cout<<ans<<endl;
    return 0;
}

日志统计

在这里插入图片描述

//双指针
#include <iostream>
#include <algorithm>
using namespace std;

#define x first
#define y second

typedef pair<int,int> PII;
const int N = 100010;
PII w[N];
int cnt[N];
bool res[N];	// 存放答案
int n, d, k;

int main()
{
    cin >> n >> d >> k;
    int a, b;
    for(int i = 0;i < n;i ++) {
        scanf("%d%d",&a,&b);
        w[i] = {a,b};
    }
    
    sort(w,w + n);
    
    for(int i = 0,j = 0;i < n;i ++) {
        
        while(j < n && w[j].x - w[i].x < d){
            cnt[w[j].y] ++;
            if(cnt[w[j].y] >= k) res[w[j].y] = true;
            j ++;
        }

        cnt[w[i].y] --;
    }
    
    
    for(int i = 0;i < N;i ++) 
        if(res[i]) printf("%d\n",i);
    return 0;
}

全球变暖

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

const int N=1e4+5,NN=1e7+5;

long ans=0,ansd=0;//ansd记录岛屿数量(或编号)
int a[NN];//记录不会被淹没的陆地的数量的数组
char ma[N][N],vis[N][N];
     //mas数组记录照片信息,vis数组为访问数组,被访问置1

int nx[4]={0,0,1,-1};
int ny[4]={1,-1,0,0};
               //方向数组

void bfs(int x,int y,int k){
	int flag=1,i=0;
	while(flag){
		if(i==4) break;
		if(ma[x+nx[i]][y+ny[i]]=='.') flag=0;
		i++;
	}
	if(i==4 and flag==1){
		a[k]++;
	}
	//判断是不是不会被淹没的陆地
	
	vis[x][y]=1;
	for(int j=0;j<4;j++){
		int nx1=x+nx[j];
		int ny1=y+ny[j];
		if(vis[x+nx[j]][y+ny[j]]==0 
		and ma[x+nx[j]][y+ny[j]]=='#') bfs(nx1,ny1,k);
	}
}

int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>ma[i][j];
		}
	}
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(ma[i][j]=='#' and vis[i][j]==0) ansd++,bfs(i,j,ansd);
		}
	}
	
	for(int i=1;i<=ansd;i++){
		if(a[i]==0) ans++;
	}
	
	cout<<ans<<endl;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:27:37  更:2022-04-06 23:28:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:03:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码