oj赛(双周赛第二十四次)

目录

1.  八大藤校2025fall标化要求已全部出炉

2.  上海“2024人才储备”计划启动!

伐木工小码哥

杰瑞吃奶酪

小码哥处理订单

黑手党

第k小的距离

养竹鼠

甜品配置

礼物

合数分解

均分糖果

持盾

咖啡品鉴师小码哥


1.  八大藤校2025fall标化要求已全部出炉

布朗大学要求2025Fall大部分申请者必须提交SAT/ACT成绩。

普林斯顿大学2023、2024、2025申请季都执行Test-Optional标化政策。

哈佛大学同样一直延续前几年的标化政策,从2023至2026申请季都执行Test-Optional标化政策。

耶鲁大学的新政策是“Test-Flexible”的,即允许申请者提交SAT或ACT考试成绩,但不再强制要求。

宾大近日宣布2024-25申请季仍保留Test-Optional标化政策,不强制提交SAT/ACT成绩。

哥大在2023年宣布将永久执行Test-Optional标化政策。

康奈尔大学在今年2月宣布,2025申请季讲继续延续将Test-Optional政策。

达特茅斯实行Test-Required标化政策。对于在美国高中就读的申请人,要求必须提交SAT或者ACT成绩;对于境外高中就读的申请人,要求提交SAT、ACT或3门AP成绩,或IB、A-Level等成绩。


2.  上海“2024人才储备”计划启动!

储备人才是上海的一种人才引进政策,类似于江苏浙江各个县市的紧缺人才引进,通常储备期3年。

✓ 各区的储备人才要求不相同,大致要求如下:

✓ 学历要求本科及以上,大部分要求硕士及以上,留学生对学校排名有要求

✓ 大多区非常看中学生在校的干部任职经历

✓ 政治面貌虽然不要求党员,但是资质审核时较为青睐党员

✓ 一般情况下要求是应届生,往届生一般不超过2年

伐木工小码哥


难度:黄金
时间限制:1秒巴:占用内存:128 M
伐木工人小码哥需要砍 M米长的木材,但只被允许砍伐一排树(考虑到环保)
小码哥的伐木机工作流程如下:设置一个高度参数(米),伐木机升起一个巨大的锯片到高度H,并锯掉所有树比H高的部分,就得到树木被锯下的部分。
请帮助小码哥找到伐木机锯片的最大的整数高度,使得他能得到的木材至少为M米。换句话说,如果再升高1米,他将得不到M米木材。
格式
输入格式:第一行2个整数N 和 M,N 表示树木的数量,M 表示需要的木材总长

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll N,M,l,r,mid,ans,a[1000007];
bool check(int num) {
    ll tot = 0;
    for (int i = 0; i < N; i++)
        if (a[i] >= num)
            tot += a[i] - num;
    return tot >= M;
}
    int main() {
        cin >> N >> M;
        for (int i = 0; i < N; i++) {
            cin >> a[i];
            r = max(r, a[i]);
        }
        while (l <= r) {
            mid = l + (r - l) / 2;
            if (check(mid))
                l = mid + 1, ans = mid;
            else
                r = mid - 1;
        }
        cout << ans;
        return 0;
    }

杰瑞吃奶酪


时间限制:1秒巴 占用内存:128 M少 难度:钻石
某一天,老鼠杰瑞抓住了一个机会,成功的到达了冰箱的附近,正当杰瑞打开冰箱门,想要享受美味的奶酪的时候,没想到冰箱里的奶酪太多了,奶酪洒了一地。汤姆猫听到了这个动静,正在火速赶往冰箱想要抓住杰瑞。杰瑞凭借与汤姆多年对抗的经历,仅凭借汤姆的脚步声便能推断汤姆还有多久抵达,现在,杰瑞并不怕汤姆,但汤姆抵达后必然影响它吃奶酪。于是杰瑞想要知道,在汤姆到达前,最多能吃到多少奶酪。
现在已知杰瑞与所有奶酪刚好排成一条直线,用坐标;记录每个奶酪的位置,杰瑞一开始的坐标为0,移动一个单位距离需要一个单位时间。
由于杰瑞能一口吃下一整块奶酪,因此吃奶酪的过程并不会花任何时间。

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 +7;
int t,n,l,r,mid,ans,a[N];

bool check(int num) {
    for (int i = 0; i <= n - num; i++) {
        int j = i + num - 1;//a[i]和a[j]是区间左右两个端点
        if (a[j] <= 0 && -a[i] <= t)
            return true;
        if (a[i] >= 0 && a[j] <= t)
            return true;
        if (a[i] <= 0 && a[j] >= 0)
            if (min(-a[i], a[j]) + (a[j] - a[i]) <= t)
                return true;
    }
    return false;
}

        int main(){
            cin >>t >>n;
            for (int i=0; i < n;i++)
                cin >>a[i];
            sort(a,a + n);
            l=1,r=n;
            while (l<=r) {
                mid = l + (r - l) / 2;
                if (check(mid))
                    l = mid + 1, ans = mid;
                else
                    r = mid - 1;
            }
            cout <<ans;
            return 0;
        }

小码哥处理订单


难度:钻石时间限制:1秒四 占用内存:128 M
假期快到了,小码哥在宾馆打暑假工。
小码哥需要处理接下来n天的住房信息,其中第i天宾馆有"个房间可供租借。共有 m 份订单每份订单用三个正整数描述,分别为,sj,t;,表示需要从第8;天到第t;天住房(包括第8i天和第t 天),每天需要出租 d;个房间。
宾馆入住是先到先得,也就是说,小码哥按照订单给到的先后顺序来进行处理。如果在分配的过程中遇到一份订单使从第s天到第t,天中有至少一天剩余的房间数量不足d;个,则需要停止工作,通知当前申请人修改订单。
由于到了假期,宾馆入住人数很多,小码哥需要知道,是否会有订单无法完全满足。如果有,小码

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
const int N=1e6 + 10;
int n,m,r[N],d[N],s[N],t[N],sub[N],need [N];
int le,ri,mid,ans;

bool check(int num) {
    memset(sub, 0, sizeof(sub));
    for (int i = 1; i <= num; i++) {
        sub[s[i]] += d[i];
        sub[t[i] + 1] -= d[i];
    }
    for (int i = 1; i <= n; i++) {
        need[i] = need[i - 1] + sub[i];
        if (need[i] > r[i])
            return true;
    }
    return false;
}
int main(){
cin >>n >>m;
for (int i=1;i <= n;i++){
cin >>r[i];
}
for (int i=1;i<=m;i++) {
    cin >> d[i] >> s[i] >> t[i];
}
    int le = 1,ri = m;
    if (!check(m)){
        cout <<0;
    return 0;
}
while (le <= ri){
mid = le +(ri-le)/2;
if (check(mid))
ri = mid -1,ans = mid;
else
le = mid +1;
}
cout <<"-1"<<endl;
cout <<ans;
return 0;
}

黑手党


少难度:黄金 时间限制:1秒巴 占用内存:128 M
有几个人在玩游戏“黑手党”,这个游戏规则是每局必须有一个主持,(n-1)名选手。其中第i个人表示想玩 a局游戏且不当主持,请求出满足每人要求的最少的局数。
格式
输入格式:第一行为人数 n;
第二行为数列 a 。
输出格式:一行一个整数即为答案。

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5 + 10;
ll a[N],n,l,r,mid,ans,sum;

bool check(ll num){return num * (n - 1)>=sum;}

    int main() {
        cin >> n;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            l = max(l, a[i]);
            sum += a[i];
        }
        r = sum;
        while (l <= r) {
            mid = l + (r - l) / 2;
            if (check(mid))
                r = mid - 1, ans = mid;
            else
                l = mid + 1;
        }
        cout << ans;
        return 0;
    }

第k小的距离


难度:黄金四 占用内存:128 M时间限制:1秒
给定一个整型数组(n个)表示的位置,请返回所有数对中第k小的距离。一对(A,B)的距离表示A和B之间的绝对差值。
格式
输入格式:第一行输入两个整型n和k(n≤10“,0<k<n(n-1)/2);第二行输入整型数组。
输出格式:输出一个整型。

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
const int N =1e6 + 10;
int n,k,l,r,mid,ans,a[N];
bool check(int num) {
    int cnt = 0;
    for (int r2 = 0; r2 < n; r2++) {
        int l2 = 0;
        while (a[r2] - a[l2] > num && r2 > l2)
            l2++;
        cnt += r2 - l2;
    }
    return cnt >= k;
}
int main() {
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    sort(a, a + n);
    r = a[n - 1] - a[0];
    while (l <= r) {
        mid = l + (r - l) / 2;
        if (check(mid))
            r = mid - 1, ans = mid;
        else
            l = mid + 1;
    }
    cout << ans;
    return 0;
}

养竹鼠


时间限制:1秒巴 占用内存:250 M难度:黄金
小码哥在饲养竹鼠,竹鼠棚里有N个隔间,这些隔间分布在一条直线上,坐标是1,2,3,·..,,(0 <i< 100000000)。小码哥有 M 只竹鼠,为了防止竹鼠中暑,他要尽可能让相邻两只竹鼠相隔越远越好。所以,所有竹鼠中相隔最近的两只竹鼠的距离的最大值是多少(1<M<N<50000)?
格式
输入格式:第一行,两个用空格隔开的数字N 和 M;后 N 行,每行一个整数表示每个隔间的坐标,坐标是唯一的,也就是两只竹鼠位置不会重合

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
int N,M,l,r,mid,ans,a[50007];

bool check(int num){
    int temp = a[0],tot = 1;
    for (int i=1;i<N;i++) {
        if (a[i] - temp >= num)
            temp = a[i], tot++;
        if (tot >= M)
            return true;
    }
        return false;
    }
    int main() {
        cin >> N >> M;
        for (int i = 0; i < N; i++)
            cin >> a[i];
        sort(a, a + N);
        r = a[N - 1];
        while (l <= r) {
            mid = l + (r - l) / 2;
            if (check(mid))
                l = mid + 1, ans = mid;
            else
                r = mid - 1;
        }
        cout << ans;
        return 0;
    }

甜品配置


少 难度:钻石时间限制:1秒巴 占用内存:128 M
小码哥的上司是一个爱吃甜品的人,他给了小码哥u的经费,去购买m 个甜品,这些甜品有 b的价格,和a;的甜度,上司希望甜度越高越好,但是他比较忙,没有时间来确定所有甜品的甜度,只会去看m 个甜品的中位数的甜度,于是小码哥决定在买m个甜品,总价格不超过v的情况下,尽可能的让中位数大。
如果m是偶数,那么中位数就是中间两个甜品的甜度的平均值。
格式
输入格式:第一行三个数v,n,m,分别代表经费,甜品数量以及需要买的甜品数量;接下来 n 行,每行两个数 a,b,分别代表甜品甜度以及价格。

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct SWEET{
    int a,b;
}sw[N];
int v,n,m,l,r,mid,ans,sum1 [N],sum2[N];
//sum1[i],sum2[i]存储了前面m前面一半和后面一半价格最小的甜品的价格和
//当m为奇数时,sum1和sum2存的都是m/2的。
//当m为偶数时,sum1存的是m/2-1,sum2存的是m/2。
bool cmp(SWEET s1,SWEET s2) {return s1.a<s2.a;}
int main(){
    cin >>v >>n >>m;
    for (int i=1;i<=n;i++)
        cin >> sw[i].a >>sw[i].b;
    sort(sw + 1,sw +n +1,cmp);

    priority_queue<int>q1,q2;
    for (int i=1;i<=n;++i){
        q1.push(sw[i].b);
        sum1[i] = sum1[i-1] + sw[i].b;
        if(q1.size()> m/2-1 + m%2)
            sum1[i] -= q1.top(),q1.pop();
    }
    for (int i=n;i>0;i--) {
        q2.push(sw[i].b);
        sum2[i] = sum2[i + 1] + sw[i].b;
        if (q2.size() > m / 2)
            sum2[i] -= q2.top(), q2.pop();
    }
        if(m%2){
            for (int i=n-m / 2; i>=m /2+1;i--)
            if (sum1[i -1] + sum2[i +1] + sw[i].b <=v) {
                cout << sw[i].a;
                break;
            }
    }else{
                for (int i=m/2;i<=n -m / 2;i++) {
                    l = i + 1, r = n - m / 2 + 1;
                    int tmp = 0;
                    while (l <= r) {
                        mid = l + (r - l) / 2;
                        if (sum1[i - 1] + sum2[mid] + sw[i].b <= v)
                            l = mid + 1, tmp = mid;
                        else
                            r = mid - 1;
                    }
                    if (tmp > i)
                        ans = max(ans, sw[i].a + sw[tmp].a);
                }
            cout <<ans /2 <<endl;
        }
    return 0;
}

礼物


难度:钻石。时间限制:1秒四占用内存:128 M
找到一个最小的V,从1...V中选cnt个数给A,选cntz个数给B。A不要r的倍数,B 不要y的倍数。 ,y为质数。一个数不能同时给 A、B。
格式
输入格式:四个数 cnt1,cntz,必,y
输出格式:-个数 V

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
int cnt1,cnt2,x,y;
bool check(int num) {
    if (num - num / (x * y) < cnt1 + cnt2)
        return 0;
    if (num - num / x < cnt1)
        return 0;
    if (num - num / y < cnt2)
        return 0;
    return 1;
}
    int main(){
        cin >>cnt1 >>cnt2 >>x >>y;
        int l = 1,r=2e9;
        int ans;
        int cnt =0;
        while (l<=r){
            int mid =l+(r-l)/2;
            if (check(mid))
                r=mid -1,ans = mid;
            else
            l=mid+1;
        }
        printf("%d",ans);
        return 0;}

合数分解


乡 难度:黄金·时间限制:1秒四占用内存:128 M
给你一个正整数n,求最多能分成几个合数。若n为合数,它自身算一个合数。无解输
出-10
格式
输入格式:第一行一个正整数 T接下来 T 行每行表示一个测试数据。
输出格式:每一行输出一个答案。

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
int t,n;
int main(){
cin >> t;
while (t--){
cin >>n;
if(n== 1|| n==2||n==3|| n==5|| n==7|| n==11)
cout<< "-1"<<endl;//因为1、2、3、5、7、11不能拆成合数
else if (n%4==0)
cout << n /4 <<endl;
else if (n%4==1)
cout<<n/4 -1<<endl;
else if (n%4 ==2)
cout << n /4 <<endl;
else if (n%4 ==3)
cout <<n /4 -1 <<endl;
}
return 0;
}

均分糖果


少 难度:钻石@时间限制:1秒四占用内存:128 M
小码哥有几个手下,位置从1到n,他们坐成一排,每个人有a 个糖果,每个人只能把糖果送给左右两个人,由于坐在1和几位置上的是术士,他们可以通过技艺,相互传递糖果,每人每次传递一个糖果代价为1。数据保证糖果一定可以被均分,不会出现小数情况。
格式
第一行一个正整数 n< 1e3 ,表示手下的个数;输入格式:接下来 n 行,每行一个整数 ai,表示第讠个手下得到的糖果的颗数。

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
long long n,a[1007],c[1007],sum,avg,ans;
int main(){
    cin >>n;
    for (int i=1;i <= n;i++){
        cin >>a[i];
        sum += a[i];
    }
    avg = sum / n;
    for (int i=1;i <= n;i++)
        c[i] = c[i-1]+avg -a[i];
    sort(c + 1,c +n + 1);
    for (int i = 1;i <= n;i++)
    ans += abs(c[n / 2 + 1] - c[i]);
    cout <<ans;
    return 0;
}

持盾


难度:黄金时间限制:1秒巴 占用内存:128 M
n个盾卫在切尔诺伯格上寻找遇难者,但是非常不巧遇见了黑蛇,黑蛇用她的火焰攻击盾卫,在一片火海中,盾卫决定排成一列,在这火焰风暴中撤退。如图所示
红色箭头为黑蛇的攻击方向,显然盾卫们(黑色的方块)在排成一列的情况下,可以受到最少的攻

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
const int N = 5e4;
struct NODE{
int w,s,sum;
}node [N];
bool cmp(NODE a,NODE b){return a.sum < b.sum;}
int n,ans =-0x3f3f3f3f,presum;
int main(){
    cin >>n;
    for (int i=1;i<=n;i++){
        cin >> node[i].w >> node[i].s;
        node[i].sum += node[i].w + node[i].s;
    }
    sort(node +1,node +n +1,cmp);
    for (int i=1;i<=n;i++){
        presum += node[i-1].w;
    ans = max(ans,presum - node[i].s);
}
cout <<ans;
return 0;
}

咖啡品鉴师小码哥


难度:钻石
时间限制:1秒巴: 占用内存:128 M
这天,小码哥想要喝一杯咖啡,现在有 n种调料,这杯咖啡只可以加入其中的 m种。
小码哥在得知所有的 n种调料后,用计算机算出了所有调料消耗的时间 c,以及调料的美味度Ui。小码哥要喝到” 最大的咖啡,也就是单位时间的美味度最大的咖啡
>表示求和,所以”表示美味度的总和 除以消耗时间的总和。
格式
输入格式:第一行为两个整数n,m,表示调料种数和能加入的调料数;接下来两行,每行为 n 个数,第一行第讠个整数表示美味度 vi,第二行第

//
// Created by abner on 2024/4/8.
//
#include <bits/stdc++.h>
using namespace std;
int n,m;
double v[205],c[205],t[205];
int check(double x) {
    double sum = 0;
    for (int i = 1; i <= n; i++) {
        t[i] = v[i] - x * c[i];
    }
    sort(t + 1, t + n + 1);
    for (int i = n; i >= n - m + 1; i--) {
        sum += t[i];
    }
    if (sum > 0)
        return 1;
    else
        return 0;
}
            int main(){
                cin >>n >>m;
                for(int i =1;i<=n;i++){
                    cin >>v[i];
                }
                for(int i=1;i<=n;i++){
                    cin >>c[i];
                }
                double l = 0,r=1001;
                while (r-l>1e-6){
                    double mid = (l + r)/ 2.0;
                    if (check(mid))
                        l=mid;
                    else
                        r=mid;
                }
                printf("%.3lf",l);
                return 0;
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值