1116蓝桥杯算法双周赛小白入门赛4.5.6题题解

本人是很普通的大学生,算法水平并不高,不能保证解答一定是最好的算法,如果有错误或者更好的算法欢迎评论区讨论

原题链接 第 22 场 小白入门赛 - 蓝桥云课

小白入门赛的4.5.6题也是强者挑战杯的1.2.3题

4.能量晶石【算法赛】 - 蓝桥云课

分析题目:

给一个数组,代表一群人,数字代表每个人的钱

每次选一个人去取钱,除了自己以外,给每个人带一块钱

问:能不能做到所有人的钱都一样

分析:

除了自己以外,给每个人带一块钱 ========> 自己少一块钱 ========>nums[pos]--

能不能做到所有人的钱都一样 ========> 数组元素都一样
解答:

本题不难,在把数据存到数组里面时找到最小值,然后遍历数组 ans += nums[pos] - 最小值

cpp 复制代码
#include <iostream>
using namespace std;
int  nums[100005];
int main()
{
  int  n = 0; cin>>n;
  int minn = 100000;
  for(int i = 1;i <= n;i++) {cin>>nums[i];
    minn = min(nums[i],minn);
  }
  long long ret = 0;
  for(int i = 1;i <= n;i++)
  {
    ret += nums[i] - minn;
  }
  cout << ret <<endl;
  return 0;
}

5.缺失的环节【算法赛】 - 蓝桥云课

标签:

滑动窗口

分析题目:

给一个01字符串

找到一个数字,这个数字转成二进制后,不存在于这个字符串

问:数字最小是多少

分析:按转成二进制的长度来进行遍历,请注意小二进制字串必须以1开头,可以使用set类来去重,

cpp 复制代码
#include <iostream>
#include <string>
#include <set>
using namespace std;
int fun(const std::string& str) {
    int ret = 0;
    for (char c : str) {
        ret *= 2;
        ret += (c - '0');
    }
    return ret;
}

int main()
{
    int size = 0;
    string str;
    cin >> size; cin >> str;
    int len = 1;
    while (len <= size) {
        int left = 0, right = len - 1;
        set<int> ss;
        int t = 1 << (len - 1);
        if (len == 1)  t++;
        for (; right < size; right++, left++) {
            if (len != 1 && str[left] == '0') continue;
            ss.insert(fun(str.substr(left, len)));
            // cout << str.substr(left, len) << ' ';
            if (ss.size() == t)
                break;
        }
        if (ss.size() < t)
        {
            int begin = 1 << (len - 1), end = 1 << len;
            if (len == 1) begin = 0;

            while (ss.count(begin)) {
                begin++;
            }
            cout << begin << endl;
            return 0;
        }
        len++;
    }
    return 0;
}

6.召唤帝皇侠【算法赛】 - 蓝桥云课

这是一道很恶心的数学题.......

我参考了这个人的题解

分析:

对于任意[n*n,(n+1)*(n+1)) 里的元素来说,需要%n == 0 才符合题意

分析这其中的元素

  1. n*n < (n+1)*(n+1) && (n+1)*(n+1) % n == 0
  2. n*(n + 1) < (n+1)*(n+1) && (n+1)*(n+1) % n == 0
  3. n*(n + 2) < (n+1)*(n+1) && (n+1)*(n+1) % n == 0

一个值最多有三个

和为n * (3n +3)

n 从 1 到 根号 X 也就是

n(n+1)(n+2)

cpp 复制代码
#include <iostream>
#include <cmath>
using namespace std;
using ll = long long;
ll N = 998244353;
int main() {
    int t;  cin >> t;
    while (t--) {
        ll x;  cin >> x;
        ll n = (ll)sqrt(x + 1); // 取整
        ll ret = (n - 1) * n % N * (n + 1) % N;   // 前面完整的情况
        // 不完整情况
        int i = 0;
        while (n * (n + i) <= x)
            ret = (ret + n * (n + i++) ) % N;
        cout << ret << endl;
    }
}
相关推荐
王老师青少年编程3 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛
DogDaoDao3 小时前
leetcode 面试经典 150 题:有效的括号
c++·算法·leetcode·面试··stack·有效的括号
Coovally AI模型快速验证4 小时前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
一只小bit4 小时前
C++之初识模版
开发语言·c++
可为测控4 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
Milk夜雨5 小时前
头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)
算法·贪心算法
CodeClimb5 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
BoBoo文睡不醒5 小时前
动态规划(DP)(细致讲解+例题分析)
算法·动态规划
apz_end6 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法
仟濹6 小时前
【贪心算法】洛谷P1106 - 删数问题
c语言·c++·算法·贪心算法