SMU Summer 2024 div2 1st


提示:这里可以添加本文要记录的大概内容:

一、前言

暑假第一周训练,直接九九六了,俩个专题题单共四十题,每天一场个人赛俩到三个小时,还有对应的题单课程和题解,都在前面几篇博客里了反正。就不一一放链接了,然后酌情放几题没做出来的,着重总结一下算法学习和题单的题吧。


二、算法

1.二分算法

二分算法其实我写过好几次了,但每次写相对应的题都会遇到不会的,希望这次真的是最后一次写吧。

//二分模板
#include<bits/stdc++.h>

using namespace std;
#define int long long

bool check(int x) {
    //具体判断的条件
    return ;
    //判断是否符合
}

signed main() {
    int l,r;
    while (l < r) {
        int mid = (l+r+1)/2;
        if(check(mid))l = mid;
        else r = mid - 1;
        //int mid = (l+r)/2;
        //if(check(mid))r = mid;
        //else l = mid + 1;
    }//mid是否加1取决于输出l和r的判断
    //以非注释部分为例,l直接等于mid,如果不加1,直接取符合条件的偏小数,可能陷入死循环。
    cout << l << endl;
   //因为l是最后的符合条件的数字。
   return 0;
   //小tips,必须返回不然会boom,爆!
}

<1> ([CQOI2010])

扑克牌
a不是什么难题,就是一道典型题变式,拿出来看看。
题解:
你有n种牌,第i种牌的数目为ci。另外有一种特殊的牌:joker,它的数目是m。你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1套牌。最多组成多少组牌。
x代表能否组成这么多牌,少的牌需要joker来代替。具体见代码。

代码:

#include<bits/stdc++.h>
using namespace std;

long long n,m;
long long c[55];

bool solve(long long x) {
   
   
    long long ans = 0;
    for (int i = 0; i < n; i++) {
   
   
        if (c[i] < x)ans+=(x-c[i]);
    }
    if (ans <= x && ans <= m)return true;
    else return false;
}

int main() {
   
   
    cin >> n >> m;
    long long ma = 0;
    for (int i = 0; i < n; i++) {
   
   
        cin >> c[i];
        if (c[i] > ma)ma = c[i];
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值