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;
    }
}
相关推荐
是苏浙2 分钟前
零基础入门C语言之C语言实现数据结构之单链表经典算法
c语言·开发语言·数据结构·算法
纵有疾風起9 分钟前
C++—vector:vecor使用及模拟实现
开发语言·c++·经验分享·开源·stl·vector
橘颂TA10 分钟前
【剑斩OFFER】算法的暴力美学——点名
数据结构·算法·leetcode·c/c++
MATLAB代码顾问1 小时前
多种时间序列预测算法的MATLAB实现
开发语言·算法·matlab
高山上有一只小老虎3 小时前
字符串字符匹配
java·算法
愚润求学3 小时前
【动态规划】专题完结,题单汇总
算法·leetcode·动态规划
林太白3 小时前
跟着TRAE SOLO学习两大搜索
前端·算法
爱凤的小光4 小时前
图漾GM461-E1相机专栏
c++
ghie90904 小时前
图像去雾算法详解与MATLAB实现
开发语言·算法·matlab
云泽8084 小时前
从三路快排到内省排序:探索工业级排序算法的演进
算法·排序算法