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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 2021年第十二届蓝桥杯省赛第一场B组题解(自己写的) -> 正文阅读

[数据结构与算法]2021年第十二届蓝桥杯省赛第一场B组题解(自己写的)

第一题:

?解题思路:


考查计算机的基础知识,1m=1024kb,1kb=1024b,b是字节的单位,1字节=8位。32位即为4个字节。

相关代码:

#include<iostream>
using namespace std;
int main(){
    cout<<256*1024*1024/4;
    return 0;
}

第二题:?

?解题思路:

没有什么思路,2021张减到0时,求这一过程。

相关代码:

#include<iostream>
using namespace std;
int a[10];
int flag=0;
int main(){
    for(int i=0;i<10;i++){
        a[i]=2021;
    }
    for(int i=1;;i++){
        int temp=i;
        while(temp){
            if(a[temp%10]==0){
                flag=1;
                break;
            }
            a[temp%10]--;              
            temp=temp/10;
        }
        if(flag==1){
            cout<<i-1<<endl;
            break;
        }        
    }
    return 0;
}

第三题:

?

解题思路:

我是用斜率做的,但是,可能会有一点差错,毕竟是除法。

相关代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int n;
typedef struct pair {
	double k;
	double b;
}PII;
bool cmp(PII p1,PII p2){
	return 	p2.k > p1.k;
}
vector<PII> l;
int main()
{
    for (int x1 = 0; x1 < 20; x1 ++ )
        for (int y1 = 0; y1 < 21; y1 ++ )
            for (int x2 = 0; x2 < 20; x2 ++ )
                for (int y2 = 0; y2 < 21; y2 ++ )
                    if (x1 != x2)
                    {
                        double k = (double)(y2 - y1) / (x2 - x1);
                        double b = y1 - k * x1;
                        l.push_back({k,b});
                    }

    sort(l.begin(), l.end(),cmp);
    int res = 1;
    for (int i = 1; i < l.size(); i ++ )
        if (fabs(l[i].k - l[i - 1].k) > 1e-8 || fabs(l[i].b - l[i - 1].b) > 1e-8)
            res ++ ;
    cout << res + 20 << endl;
    return 0;
}

第四题:

解题思路:

求出n的所有的约数。。然后三重循环,注意:求约数的时候应该稍微地减少时间的复杂度。

相关代码:

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
long long n=2021041820210418;
vector<long long> a;
int cnt;
int main(){

    //首先求出n的所有的约数
    for(int i=1;i<=sqrt(n);i++){
        if(n%i==0){
            a.push_back(i);
        }
        if(n%i==0&&n/i!=i)
        a.push_back(n/i);
    }
    for(int i=0;i<a.size();i++){
        for(int j=0;j<a.size();j++){
            for(int k=0;k<a.size();k++){
                if(a[i]*a[j]*a[k]==n){
                    cnt++;
                }
            }
        }
    }
    cout<<cnt;
    return 0;
}

第五题:

由于涉及到图论的知识,我目前还没有复习。

第六题:

??

解题思路:

有手就行,没什么思路,注意:%02d表示的是如果少于两位则用零来补充。

相关思路:

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
long long ms;
long long h,m,s;
int main(){
    cin>>ms;
    s=ms/1000;
    s=s%(24*3600);
    h=s/3600;
    m=(s-h*3600)/60;
    s=s-h*3600-m*60;
    printf("%02d:%02d:%02d\n",h,m,s);
    return 0;
}

第七题:

?解题思路:

dp,dfs,如果实在是不会,就跳过吧。

相关代码1:

#include<iostream>
using namespace std;
int n;
int a[100001];
bool st[100001];
int res;
void dfs(int u,int sum){
    if(u==n){
        if(sum>0&&st[sum]!=true){
            res++;
            st[sum]=true;
        }    
        return;
    }
    dfs(u+1,sum);  //不选
    dfs(u+1,sum+a[u]);    
    dfs(u+1,sum-a[u]);
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    dfs(0,0);
    cout<<res;
    return 0;
}

相关代码2(dp法):

#include<iostream>
using namespace std;
int f[110][100001];
int n;
int w;
int nums[110];
int res;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>nums[i];
        w+=nums[i];
    }
    f[0][0]=1;   //刚开始什么都没选表示只有一种方案。
    for(int i=1;i<=n;i++){
        for(int j=0;j<=w;j++){
          
            f[i][j]=f[i-1][j]||f[i-1][j+nums[i]]||f[i-1][abs(j-nums[i])];   //三者只要有一个存在,则f[i][j]存在。
            
        }
    }
    for(int i=1;i<=w;i++){
        if(f[n][i]!=0){
            res++;
        }
    }
    cout<<res;
    
    
    return 0;
}

第八题:

解题思路:

比赛的时候优先使用打表法,可以骗走一半的分,第二种方法比较难想。

相关代码1:

#include<iostream>
using namespace std;
int a[1001][1001];
int n;
int res;
int flag=0;
int main(){
    scanf("%d",&n);
    for(int i=0;i<1001;i++){
        a[i][i]=1;
        a[i][0]=1;
    }
    for(int i=1;i<1001;i++){
        for(int j=1;j<=i;j++){
            a[i][j]=a[i-1][j]+a[i-1][j-1];
        }
    }
    for(int i=0;i<1001;i++){
        for(int j=0;j<=i;j++){
            res++;
            if(a[i][j]==n){
                cout<<res;
                flag=1;
                break;
            }
        }
        if(flag==1){
            break;
        }
    }
    return 0;
    
}

相关代码2:

#include <iostream>

using namespace std;

const int N = 1000;
typedef long long LL;

LL n, r, c;

long long C(int a,int b){
    long long res=1;
    for(int i=a-b+1,j=1;i<=a&&j<=b;i++,j++){
        res=res*i/j;
    }
    return res;
}

bool check(long long k){
    long long  l = 2 * k, r = n;
    while(l < r){
        int mid = (l + r) >> 1;
        if(n <= C(mid, k)) r = mid;
        else l = mid + 1;
    }
    if(C(l, k) == n){
        cout<<l * (l + 1) / 2 + k + 1;
        return true;
    }
    return false;
}

int main() {
    cin >> n;
    if(n==1){
        cout<<1;
    }
    for(int i = 16; i >= 1; i--)
        if(check(i)) 
            break;

    return 0;
}

第九题:

解题思路:

直接用sort()方法来骗分。?

相关代码:

#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int a[100001];
int p,q;
bool cmp(int x,int y){
    return x>y;
}
int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        a[i]=i+1;
    }
    while(m--){
        cin>>p>>q;
        if(p==1){
            sort(a+q-1,a+n);
        }
        else{
            sort(a,a+q,cmp);
        }
    }
    for(int i=0;i<n;i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

第十题:

不会做。。好难。。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:25:52  更:2022-03-17 22:26:02 
 
开发: 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 11:34:38-

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