目录
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;
}