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;
    }
}
相关推荐
Romanticroom几秒前
图论之最小生成树计数(最小生成树的应用)
算法·图论
黑不溜秋的14 分钟前
C++ 并发专题 - 线程安全的单例模式
开发语言·c++
gma99921 分钟前
【Qt聊天室】客户端实现总结
c++·qt
TT编程1 小时前
力扣(leetcode)题目总结——动态规划篇
c++·leetcode·面试·动态规划
SuhyOvO1 小时前
std::sort的底层原理(混合排序算法)
c++·算法·stl·排序算法
licy__1 小时前
python常用的排序算法
python·算法·排序算法
行码棋1 小时前
【机器学习】决策树算法原理详解
算法·决策树·机器学习
卷卷的小趴菜学编程1 小时前
类和对象(中)
java·c语言·开发语言·数据结构·c++·算法·链表
不打灰的小刘2 小时前
基于自动反馈的大语言模型纠错策略综述
人工智能·算法·语言模型·chatgpt
星星也在雾里2 小时前
Windows安装vcpkg教程(VS2022)
c++·windows·个人开发·visual studio