ACM题解Day10|总结篇|进制转化,GCD ,LCM ,二分答案

在这里插入图片描述

🔥博客介绍`: 27dCnc

[C++string中find_first_not_of()函数和find_last_not_of()函数-CSDN博客]

方差,期望 概率


今日打卡:

在这里插入图片描述

算法周总结

ACM题解Day3| To Crash or not To Crash,Integer Prefix ,I don’t want to pay for the Late Jar-CSDN博客

第3题: 这道题对于没有看题解的我来说算是比较有难度的了, 其难度根本以我的理解 题目理解

我们要这么样去将问题解决?这么样让这个人的幸福值最大化?

现在我对这道题的总结是: 我们先把关系理清然后去找数据间的关系,题目要求是让钱花最少,还要让幸福值最大,如果我们不去分清题目关系就会这么理解,实际上我们要是要每天为了幸福值节省的最大金额,即最大金额,所以我们要储存数据,然后比较时间的关系,去确定当前数据的处理方式,然后根据处理方式查找出最大值

在这里插入图片描述

第4题: 明显的模拟题,这个算是比较难的模拟题了,题目要求找出题目间的关系,常规思路就是按照他上面说的暴力解决,但是x y这么确定?用双层 for 去遍历整个斐波那契数列,然后去在符号关系的然后记录他们间的和然后判断是否是斐波那契数列?这么判断,暴力就遍历整个数组

在这里插入图片描述

进制转化模版默写

ACM题解Day5| 进制转化专栏| 10进制转化为2进制 , 8进制转换为10进制,16进制内通用解法,x 进制转 10 进制-CSDN博客

#include<bits/stdc++.h>
#define endl '\n'
#define Run 0
using namespace std;

class Solution { 
public:
    void solve() {
        int n,m;
        std::string s; std::cin >> n >> s >> m;  //这里输入是 当前进制 n 当前数 s 要转换的字符串 m
        int A = AToB(s,n);
        std::string t = intToA(A,m);
        std::cout << t << endl;
    }
public:
    template<typename T>
    string intToA(T n,T radix) {  // n 是10进制数字 然后转化为 radix进制数
       if (radix == 0) return "0";

       std::string ans = "";

       do {
            int t = n % radix;
            if (t >= 0 && t <= 9) ans += t + '0';
            else ans += t - 10 + 'A';

            n /= radix;
       }while(n > 0);
       std::reverse(ans.begin(),ans.end());

       return ans;
    }
public: 
    long int AToB(string s,int radix) {
        return std::strtol(s.c_str(),nullptr,radix); //将不同进制转化为 10 进制
    }
};

signed main() {
    std::cin.tie(0) -> std::ios::sync_with_stdio(false);
    std::cout.tie(0) -> std::ios::sync_with_stdio(false);

#if Run
    int _; std::cin >> _; whil(_--) Solution().solve();
#else
    Solution().solve();
#endif
    return 0;
}

在这里插入图片描述
混子文章|蓝桥杯一题 -平方差-CSDN博客

平方差考察数学平方关系: 平方差数有俩: 将俩数分 可能要考虑极端情况一个数为 1
要将 x 分为奇数偶数 奇数x y 相差 1 偶数 xy 相差 2

  • 如果 x 为奇数 y + z = x , y - z = 1

  • 如果 x 为偶数 y + z = x / 2 y - z = 2

在这里插入图片描述
ACM题解Day8 | 最小公倍数 GCD 模块 |最小共倍数,等差数列,后缀表达式-CSDN博客

最大公倍数(GCD) ,最小公约数 (lcm)

还有就是思维题后缀表达式 -(- -) 的方式处理负号

等差数列: 要求的就是最大公倍数,用来确定最大数组长度最大项减去最小项然后得到数据间的公差的倍数 * 区间长度的数据 如果无法确定多少项当前项就是最大项(可以这样认为)

在这里插入图片描述

ACM题解Day9| 2019 ,钱币找零,砍树-CSDN博客

钱币找零: 是贪心, 是找零的经典题, 动规的贪心真的很难

#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100005
using unl = __int128_t;
using ll = long long;
using namespace  std;
int a[6]={1,5,10,20,50,100};
int cnt[6] = {N,N,N,N,N,N};//对应上面的张数

class Solution {
public: // 转换为完全背包问题
     void solve() {
        int money; cin >> money; // 背包容量
        for (int i = 5; i >= 0; i --) { 
            int zhanshu = 0;
            if (money > 0) {
                zhanshu = min(money / a[i],cnt[i]);
                cnt[i] = zhanshu;
            }
            money -= zhanshu * a[i];
        }
        for (int i = 5; i >= 0; i--) {
            if ( cnt[i] > 0&&cnt[i] < N) cout << "需要" << cnt[i] << "张"<< a[i] << "块的" << endl;
        }
    }
};

signed main() {

    cin.tie(0) -> ios::sync_with_stdio(0);
    cout.tie(0) -> ios::sync_with_stdio(0);

#if Run
    int _;cin>>_;while(_--) Solution().solve();
#else
    Solution().solve();
#endif

    return 0;
}

砍树是二分答案

不断在序列中进行二分查找然后不断去缩小空间然后判断每个结点的是否满足条件最终找到答案的方法

#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100000005
using unl = __int128_t;
using ll = long long;
using namespace  std;
ll a[N + 5];

class Solution {
public: //运用二分算法
    void slove() {
        ll n,m; cin >> n >> m;
        ll r = LLONG_MIN,l = 0,mid;
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
            r = max(r,a[i]);
        } //输入木材并找到木材最大值
        while(l < r) {
            mid = (l + r + 1) / 2;
            if (ltm(mid,n,m)) l = mid;
            else r = mid - 1;
        } //二分锯片高度
        cout << l << endl;
    }
    bool ltm(ll x,ll n,ll m) {
        ll sum = 0;
        for (int i = 1; i <= n; i++) if (a[i] > x) sum = sum + a[i] - x; //计算木材
        if(sum >= m) return true;
        return false;
    }
};

signed main() {

    cin.tie(0) -> ios::sync_with_stdio(0);
    cout.tie(0) -> ios::sync_with_stdio(0);
#if Run
    int _;cin>>_;while(_--) Solution().slove();
#else
    Solution().slove();
#endif
    return 0;
}

2019: 应该算是一道思维题 将某个数设置成未知数, 然后去表示另外的数,通过其中的关系去不断去进行遍历最后直到找到答案为止


刷题总结:
我们在写一道题目的时候应该考虑题目的考点 然后去寻找思路,不断去优化我们的代码, 思路要先找到题目要先读懂

在这里插入图片描述

重磅消息:

GTP - 4 最新版接入服务他来了 点击链接即可查看详细

GTP - 4 搭建教程

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值