每日刷题(二分)

news2024/9/21 14:33:46

E. Klee's SUPER DUPER LARGE Array!!!

https://codeforces.com/contest/2009/problem/E

思路:

题目让我们求从k开始的n个数的前k个数的和与剩下的数的和的差最小是多少,可以用数学思维O(1)求解,都是我数学比较差,我们这里用二分。

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<algorithm>
#define int long long
#define pb push_back
#define TEST int T; cin >> T; while (T--)
#define ios ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define lowbit(x) x&(-x)
#define pll pair<int,int>
const int N = 3e5 + 30;
const int M = 1e3 + 10;
const int inf = 512785182741247112;
const int mod = 1e9+7;
using namespace std;
int ss(int a, int b) {
    return ((a + b) * (b - a + 1)) / 2;
}
void solve() {
    int n, k;
    cin >> n >> k;
    int l = 1, r = n-1;
    int ans;
    while (l <= r) {
        int mid = l + r >> 1;
        if (ss(k, k + mid - 1) < ss(k + mid, k + n - 1)) ans=mid,l = mid + 1;
        else ans=mid,r = mid - 1;
    }
    int res = 1e20;
    for (int i = max(1ll,ans - 10); i <= ans + 10&&i<n; i++) {
        res = min(res, abs(ss(k, k + i - 1) - ss(k + i, k + n - 1)));
    }
    cout << res << '\n';
    
}
signed main() {
    
    ios; TEST
        solve();
    return 0;
}

D. Wooden Toy Festival

https://codeforces.com/contest/1840/problem/D

思路:

很明显是一道二分答案的题目,所以我们只需要考虑判断函数怎么写即可,我们发现我们只需要安排的雕刻师不大于三即可,我们可以对数组排序,我们看看每一个雕刻师最多保证答案不会超出界限,最后判断我们使用的雕刻师数量即可。

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<algorithm>
#define int long long
#define pb push_back
#define TEST int T; cin >> T; while (T--)
#define ios ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define lowbit(x) x&(-x)
#define pll pair<int,int>
const int N = 1e6 + 30;
const int M = 1e3 + 10;
const int inf = 512785182741247112;
const int mod = 1e9 + 7;
using namespace std;
int n, a[N];
bool check(int x) {
    //安排几个人
    int cnt = 0;
    int pre = a[1];
    for (int i = 1; i <= n; i++) {
        if ((a[i] - pre + 1) / 2 <= x) {
        }
        else {
            pre = a[i];
            cnt++;
        }
        if (cnt >= 3) return false;
    }
    return cnt < 3;
}
void solve()
{
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    sort(a + 1, a + 1 + n);
    int l = 0, r = 1e9;
    int ans;
    while (l <= r) {
        int mid = l + r >> 1;
        if (check(mid)) ans=mid,r = mid-1;
        else l = mid + 1;
    }
    cout << ans << '\n';
}
signed main() {
    
    ios; TEST
        solve();
    return 0;
}

分巧克力

1227. 分巧克力 - AcWing题库

思路:

只要知道一个长为h,宽为w的巧克力可以分成(h/x)*(w/x)个边长为x的正方形巧克力即可。

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<algorithm>
#define int long long
#define pb push_back
#define TEST int T; cin >> T; while (T--)
#define ios ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define lowbit(x) x&(-x)
#define pll pair<int,int>
const int N = 1e6 + 30;
const int M = 1e3 + 10;
const int inf = 512785182741247112;
const int mod = 1e9 + 7;
using namespace std;

int n, k;
int h[N], w[N];
bool check(int x) {
    int res = 0;
    for (int i = 1; i <= n; i++) {
        res += (h[i] / x) * (w[i] / x);
        if (res >= k) return true;
    }
    return res >= k;
}
void solve()
{
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> h[i] >> w[i];
    int l = 1, r = 1e9, ans;
    while (l <= r) {
        int mid = l + r >> 1;
       
        if (check(mid)) {
            ans = mid;
            l = mid + 1;
        }
        else {
            r = mid - 1;
        }
    }
    cout << ans << '\n';
}
signed main() {
    
    ios; 
        solve();
    return 0;
}

4001. 训练

4001. 训练 - AcWing题库

思路:

用二分求出每个位置有多少个数比他小,再在每次的关系中判断,如果有关系的位置中,恰好这个位置是比你小的数,则答案减一。

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<algorithm>
#define int long long
#define pb push_back
#define TEST int T; cin >> T; while (T--)
#define ios ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define lowbit(x) x&(-x)
#define pll pair<int,int>
const int N = 1e6 + 30;
const int M = 1e3 + 10;
const int inf = 512785182741247112;
const int mod = 1e9 + 7;
using namespace std;

bool cmp(pll a, pll b) {
    return a.first < b.first;
}
void solve()
{
    int n, k;
    cin >> n >> k;
    vector<pll>r(n + 1);
    vector<int>a(n + 1);
    vector<int>b(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> r[i].first;
        r[i].second = i;
        a[i] = r[i].first;
        b[i] = r[i].first;
    }
    vector<int>cnt(n + 1);
    sort(r.begin() + 1, r.end(), cmp);
    sort(a.begin() + 1, a.end());
    for (int i = 1; i <= n; i++) {
        int pos=lower_bound(a.begin()+1, a.end(), a[i]) - a.begin();
        cnt[r[i].second] = pos - 1;
    }
   
    for (int i = 1; i <= k; i++) {
        int x, y;
        cin >> x >> y;
        if (b[x] > b[y]) cnt[x] = max(0ll, cnt[x] - 1);
        if (b[y] > b[x]) cnt[y] = max(0ll, cnt[y] - 1);
    }
    for (int i = 1; i <= n; i++) cout << cnt[i] << ' ';
}
signed main() {
    ios; 
        solve();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业财税自动化解决方案的成本效益分析与投资回报预测

随着企业规模的扩大和业务复杂度的增加&#xff0c;企业在财务管理方面也面临着诸多挑战&#xff0c;传统的财务管理方式逐渐无法满足企业经营需求&#xff0c;借助财税自动化解决方案来提高财务效率和准确性、降低人力成本&#xff0c;为企业带来长期的效益提升&#xff0c;已…

基于MATLAB的图像融合设计

摘 要 图像融合能够将不同类型传感器获取的同一对象的图像数据进行空间配准。并且采用一定的算法将不同类型的传感器获取的同一对象的图像数据所含用的信息优势或互补性有机地结合起来产生的新的图像数据。这种新数据含有所研究对象的更多信息表征&#xff0c;与单一图像相对比…

《python语言程序设计》2018版第8章第15题商业:检测ISBN-10一个国际标准书号

这个作者一天净出幺蛾子.我这边还老打错字,我现在都不敢用缩写,都是全拼 str_vis_text "013601267" len_num len(str_vis_text)def run_text(num_t, text_about):text_sum 0for i in range(0, num_t):text_sum if_digit(text_about[i])*(i1)print(text_sum%11)pr…

Python框架Pandas:DataFrame的应用

一、DataFrame DataFrame是什么&#xff1f; 1.1 DataFrame的创建 1.1.1 方式一&#xff1a;使用字典加列表创建df&#xff0c;使用默认自增索引 import pandas as pd # 使用字典加列表创建df&#xff0c;使用默认自增索引 df1_data {日期:[2021-08-21,2021-08-22,2021-0…

应用连接错误,初始化mysql数据库恢复---惜分飞

有人在部署一个新网站的时候,写错了配置信息,直接导致原有数据库被清掉,并创建了新库和写入了数据(其实本质就是drop table恢复) 登录操作系统查看,发现数据库文件在根分区,创建了新库,写入了数据之外,还有几个G的binlog.全部恢复不太可能,最后客户决定需要恢复的2个核心表数…

如何将写好的Java代码打成jar包放在hadoops上运行

1、打包java文件 2、jar包上传&#xff0c;hadoop执行 我们将打好的jar包上传到Linux&#xff0c;因为hadoop是安装在Linux上的&#xff0c;然后用hadoop执行&#xff0c;执行前要确保已经在Linux上配置了hadoop的环境变量&#xff0c;不然就要到hadoop的目录下执行该命令 执…

记一次Hiveserver2连接异常的解决-腾讯云-emr

原文阅读&#xff1a;【巨人肩膀社区博客分享】记一次Hiveserver2连接异常的解决-腾讯云-emr 离线任务跑的好好的&#xff0c;忽然有一天失败了&#xff0c;查看海豚上的任务执行日志发现是hiveserver2连接超时了。 查看监控发现了几个问题一个是GC变得频繁&#xff0c;另一个…

Mac电脑剪切板在哪里找 苹果电脑剪切板打开教程【详解】

Windows 和 Mac 电脑在使用方式上存在一些差异&#xff0c;许多习惯了 Windows 系统的用户初次接触 Mac 时可能会对某些操作感到困惑。比如&#xff0c;很多人会问&#xff1a;Mac 上的剪贴板在哪里&#xff1f;如果你也有这样的疑问&#xff0c;不妨看看下面这篇关于如何在 Ma…

redis 基本数据类型—string类型

一、介绍 Redis 中的字符串&#xff0c;直接就是按照二进制数据的方式存储的&#xff0c;不会做任何的编码转换。 Redis对于 string 类型&#xff0c;限制了大小最大是512M 二、命令 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在&#xff0c;则覆盖&#…

系统架构设计师|关于系统架构-002

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者、腾讯云TDP-KOL、ACDU成员、墨天轮技术专家博主 &#x1f52…

DBeaver 24.2 发布下载,新增功能概览

DBeaver Ultimate Edtion 24.2 Multilingual (macOS, Linux, Windows) - 通用数据库工具 One tool for all data sources 请访问原文链接&#xff1a;https://sysin.org/blog/dbeaver/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…

【局域网投屏】sunshine和moonlight投屏/屏幕共享/扩展屏

主机是sunshine&#xff0c;客机是moonlight&#xff0c;一个太阳一个月光&#xff0c;两者真是太配啦&#xff01; 下载sunshine sunshine是服务器端&#xff0c;去以下GitHub链接下载windows端的解压缩即用版 https://github.com/LizardByte/Sunshine/releases下载完毕解压…

Linux高级查找、过滤

find 在指定目录下查找文件和目录 基本语法&#xff1a;find [路径] [ 参数] [查找条件] 常用参数 -name 根据文件或目录的名称查找 find /path -name test.txt-iname 与name类似&#xff0c;但忽略大小写-size 根据文件大小查找 find /path -size 10M-user 根据文…

HS光流法原理与实现

1. 前言 人眼观察到物体运动时,物体会在视网膜平面上形成一系列连续变化的图像“流过”视网膜,好像一种光的“流”,所以被称为光流。 光流基于像素点定义,所有光流的集合称为光流场。通过对光流场分析,可以得到物体相对于观察者的运动信息。计算光流场的方法有很多,常见的…

Java中的类型转换 Day4

类型转换 类型转换总结来说就是&#xff1a;自动提升 手动下降 3.1 自动类型转换 自动类型转换需要满足的要求 两种类型相互兼容 例&#xff1a;int类型的取值范围包含了short类型的取值范围 目标类型大于源类型 目标类型的取值范围&#xff08;等号左边&#xff09;大于源…

debug对于开发工程师很重要

在日常开发中&#xff0c;总会遇到一些出人意料的bug&#xff0c;程序跑飞&#xff0c;上电就挂&#xff0c;程序没有按预期执行诸如此类的问题&#xff0c;没有好的调试方法&#xff0c;真的很难定位问题&#xff0c;更别说解决了。在这里分享我用过的一些调试方法&#xff0c…

欧几里得算法求最大公约数

两个不全为0的非负整数m&#xff0c;n的最大公约数记为gcd&#xff08;m&#xff0c;n&#xff09;&#xff0c;代表能够整除&#xff08;即余数为0&#xff09;m和n的最大正整数。 计算gcd&#xff08;m&#xff0c;n&#xff09;的欧几里得算法&#xff1a; 第一步&#xf…

初识爬虫2

requests学习&#xff08;未更新完&#xff09;&#xff1a; 小技巧&#xff0c;如果你用的也是pycharm&#xff0c;对于控制台输出页面因为数据很长一行&#xff0c;不方便进行查看&#xff0c; 可以让它自动换行&#xff1a; 1.requests文档阅读学习链接&#xff1a;快速上…

linux 脱机

先安装 screen apt-get install screen

【网络】网络通信的传输方式

目录 1.网络通信中的两种基本通信模式 1.1.怎么理解连接 1.2.面向有连接类型 1.3.面向无连接类型 2.实现这两种通信模式的具体交换技术 2.1.电路交换 2.2.分组交换 3.根据接收端数量分类 单播&#xff08;Unicast&#xff09; 广播&#xff08;Broadcast&#xff09; …