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

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

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

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

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

分析题目:

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

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

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

分析:

除了自己以外,给每个人带一块钱 ========> 自己少一块钱 ========>numspos--

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

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

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;
    }
}
相关推荐
bkspiderx3 分钟前
从零开始:VS Code搭建C/C++开发环境全指南(Windows/macOS/Linux)
c语言·c++·windows·vs code·c/c++开发环境
东华万里5 分钟前
第40篇C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·面试·大学生专区
luj_176817 分钟前
元设计的诱惑与现实
c语言·开发语言·c++·经验分享·算法
小星星闪亮登场19 分钟前
ST表--倍增思想
开发语言·数据结构·c++·算法·思维
东华万里22 分钟前
第40篇 C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·大学生专区
AC赳赳老秦25 分钟前
OpenClaw 多源采集公开行业数据:从原始信息到研究报告初稿的自动化实践
java·c语言·c++·python·php·deepseek·openclaw
玩三国杀玩的1 小时前
Pytorch-c++-CUDA
c++·pytorch·python·深度学习
马可家的菠萝1 小时前
Vue3 + Canvas 手绘笔记工程化实践:别把画布只当成一张 PNG
前端·vue.js·算法
watersink1 小时前
机器学习极大似然估计与EM算法
人工智能·算法·机器学习
叠层归一研究院1 小时前
如何用程序搭建一个 AGI 种子系统(一):从向量种子到无限生长引擎
人工智能·python·算法·机器学习·agi