蓝桥杯刷题(二分)

前言:

最近学校的学业有点重,好多课的作业一下布置导致我时间紧张,今天好不容易找到了整块的时间来刷刷题,不过有几道题难度对我来说有一点大了,所以到现在为止也没做几道,希望自己在后面能更勤奋一点吧。

正文:

1、分巧克力:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+9;
int n,k,h[N],w[N],ans;
bool check(int x){
	int num=0;
	for(int i=1;i<=n;i++){
		num+=(h[i]/x)*(w[i]/x);
		if(num>=k)return 1;
	}
	return 0;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>h[i]>>w[i];
	long long l=1,r=1e5,mid;
	while(l<r){
		mid=(l+r+1)/2;
		if(check(mid))l=mid;
		else r=mid-1;
	}
	cout<<r<<endl;
	return 0;
}

2、管道:

cpp 复制代码
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N=1e5+10;
typedef long long ll;
int n,m;
pair<int,int>w[N],q[N];
bool check(int mid){
	int cnt=0;
	for(int i=1;i<=n;i++){
		int L=w[i].x,S=w[i].y;
		if(mid>=S){
			int t=mid-S;
			int l=max(1,L-t),r=min((ll)m,(ll)L+t);
			q[cnt++]={l,r};
		}
	}
	sort(q,q+cnt);
	int st = -1, ed = -1;
    for(int i=0;i<cnt;i++){
        if (q[i].x <= ed + 1) ed = max(ed, q[i].y);
        else st = q[i].x, ed = q[i].y;
    }
    return st==1&ed==m;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>w[i].x>>w[i].y;
	}
	ll l=0,r=2e9;
	while(l<r){
		ll mid=l+r>>1;
		if(check(mid))r=mid;
		else l=mid+1;
	}
	cout<<r<<endl;
	return 0;
}

3、技能升级:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010;
int n, m;
int a[N], b[N];
bool check(int mid)
{
    LL res = 0;
    for (int i = 0; i < n; i ++ )
        if (a[i] >= mid)
            res += (a[i] - mid) / b[i] + 1;
    return res >= m;
}
int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i ++ ) scanf("%d%d", &a[i], &b[i]);
    int l = 0, r = 1e6;
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    LL res = 0, cnt = 0;
    for (int i = 0; i < n; i ++ )
        if (a[i] >= r)
        {
            int c = (a[i] - r) / b[i] + 1;
            int end = a[i] - (c - 1) * b[i];
            cnt += c;
            res += (LL)(a[i] + end) * c / 2;
        }
    printf("%lld\n", res - (cnt - m) * r);
    return 0;
}

后记:

之后要开会,不知道大学怎么这么多破事。

相关推荐
Peter·Pan爱编程2 分钟前
成员函数与 this 指针:函数属于数据
c++
逻辑君11 分钟前
物理学研究报告【20260001】
人工智能·算法
AI科技星20 分钟前
算法联盟·全域数学公理体系下黑洞标量毛发与LVK引力波O4全维理论、求导、证明、计算、验证、分析
人工智能·线性代数·算法·架构·学习方法·量子计算
谙弆悕博士20 分钟前
【附C语言源码】C语言 栈结构 实现及其扩展操作
c语言·开发语言·数据结构·算法·链表·指针·
YuanDaima204821 分钟前
图论基础原理与题目说明
数据结构·人工智能·python·算法·图论·手撕代码
AI人工智能+电脑小能手22 分钟前
【大白话说Java面试题 第53题】【JVM篇】第13题:JVM采用什么算法判断一个对象是否需要被回收?
java·jvm·算法·面试
小赵不会秃头26 分钟前
数据结构Day 06:线性结构、库操作及 Makefile 完整学习笔记
java·linux·数据结构·算法·面试
music score28 分钟前
google 的C++自动化测试框架详解(Google Test)(2)
c++·qt·lucene
charlie11451419134 分钟前
基于开源项目的现代C++实战——OnceCallback 实战(五):then 链式组合
开发语言·c++·开源
Shan120536 分钟前
在C++中尝试封装为函数
开发语言·c++·算法