【寒假每日一题】总结(第十五天)

前言

今天是复习,总结一下这几天的题目和代码!!!

在这里插入图片描述

题目

第八天

博客

【寒假每日一题】分巧克力(个人练习)详细题解+推导证明(第八天)附带转载程序员壁纸

题解

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long LL;
const int N = 100005;

int n, m;
int h[N], w[N];

bool check(int mid)
{
    LL ans = 0;
    for (int i = 0; i < n; ++ i )
    {
        ans += (LL)(h[i] / mid) * (w[i] / mid);
        if (ans >= m) return true;
    }
    return false;
}

int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; ++ i ) cin >> h[i] >> w[i];
    
    int l = 1, r = 1e5;
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if(check(mid)) l = mid;
        else r = mid - 1;
    }
    cout << r << endl;
    
    return 0;
}

讲解

这个题是之前一个题的二维空间版本。

第九天

博客

【寒假每日一题】校门外的树(个人练习)详细题解+推导证明(第九天)

题解

#include <iostream>
#include <cstring>
#include <algorithm>

#define x first
#define y second

using namespace std;

typedef pair<int,int> PII;
const int N = 110;

int n, m;
PII segs[N];

int main()
{
    cin >> n >> m;
    for (int i = 0; i < m; i ++ ) cin >> segs[i].x >> segs[i].y;
    sort(segs, segs + m);

    int sum = 0;
    int st = segs[0].x, ed = segs[0].y;
    for (int i = 1; i < m; i ++ )
        if (segs[i].x <= ed) 
            ed = max(ed, segs[i].y);
        else
        {
            sum += ed - st + 1;
            st = segs[i].x, ed = segs[i].y;
        }
    sum += ed - st + 1;
    cout << n + 1 - sum << endl;

    return 0;
}

讲解

讲道理,区间排序是一个很重要的算法,并且难了不会,会了不难。

第十天

博客

【寒假每日一题】奖学金(个人练习)详细题解+推导证明(第十天)

题解

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 305;

int n;
struct Person
{
    int id, sum, a, b, c;
}q[N];

int main()
{
    cin >> n;
    for (int i = 1; i <= n; ++ i )
    {
        int x, y, z;
        cin >> x >> y >> z;
        q[i] = {i, x + y + z, x, y, z};
    }
    sort(q + 1, q + 1 + n, [](Person& x, Person& y){
        if (x.sum != y.sum) return x.sum > y.sum;
        if (x.a != y.a) return x.a > y.a;
        return x.id < y.id;
    });
    for (int i = 1; i <= 5; ++ i )
        cout << q[i].id << " " << q[i].sum << endl;
        
    return 0;
}

讲解

学会使用新版C++的特性,这会增加你的生产力。

第十一天

博客

【寒假每日一题】翻硬币(个人练习)详细题解+推导证明(第十一天)

题解

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 105;

string a, b;

void turn(int i)
{
    if(a[i] == '*') a[i] = 'o';
    else a[i] = '*';
}

int main()
{
    cin >> a >> b;
    int ans = 0;
    for (int i = 0; i < a.size() - 1; ++ i )
        if (a[i] != b[i])
        {
            ++ ans;
            turn(i), turn(i + 1);
        }
    
    cout << ans << endl;
    return 0;
}

讲解

分析之后,你会发现从头到尾进行模拟,是时间复杂度的最优解。

第十二天

博客

【寒假每日一题】找硬币(个人练习)详细题解+推导证明(第十二天)

题解

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 100005;

int n, m;
int f[N];

int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; ++ i ) cin >> f[i];
    sort(f, f + n);
    
    for (int i = 0, j = n - 1; i < j; ++ i )
    {
        while (i < j && f[i] + f[j] > m) -- j;
        if (i < j && f[i] + f[j] == m)
        {
            cout << f[i] << " " << f[j] << endl;
            return 0;
        }
    }
    puts("No Solution");
    return 0;
}

讲解

学会使用哈希表和双指针进行互相优化。

第十三天

博客

【寒假每日一题】十三号星期五(个人练习)详细题解+推导证明(第十三天)

题解

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int weekdays[7];

int main()
{
    int n;
    cin >> n;
    
    int days = 0;
    for (int y = 1900; y < 1900 + n; ++ y )
    {
        for (int m = 1; m <= 12; ++ m )
        {
            weekdays[(days + 12) % 7] ++;
            days += months[m];
            if (m == 2)
                if ((y % 100 && y % 4 == 0) || (y % 400 == 0))
                    ++ days;
        }
    }
    
    for (int i = 5, j = 0; j < 7; i = (i + 1) % 7, ++ j )
        cout << weekdays[i] << " ";
    cout << endl;
    
    return 0;
}

讲解

需要注意的是输出,从周五开始。

第十三四

博客

【寒假每日一题】平方矩阵 II(个人练习)详细题解+推导证明(第十四天)

题解

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 105;

int n;

int main()
{
    while (cin >> n, n)
    {
        for (int i = 1; i <= n; ++ i )
        {
            for (int j = i; j >= 1; -- j ) cout << j << " ";
            for (int j = i + 1; j <= n; ++ j ) cout << j - i + 1 << " ";
            cout << endl;
        }
        cout << endl;
    }
    
    return 0;
}

讲解

这种数学题,建议从一开始看到的最简单的方式去书写代码。

总结

继续努力,坚持更新,15th打卡。

唤醒鹿鸣,体验暖心陪伴

米哈游真的厉害

我是管小亮 CSDN认证博客专家 TensorFlow PyTorch 图像处理
纸上得来终觉浅,绝知此事要躬行

包括但不局限于机器学习,深度学习,自然语言处理,计算机视觉,知识图谱,还有Python,C++,TensorFlow,Pytorch,Keras,PaddlePaddle等,不定时分享资源(电子书/项目/工具),学习路线,思考,面经等!!!
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页