【nynu】 妹妹的工资怎么算(二分)

博客围绕《我的妹妹哪有这么可爱!》中女主高坂桐乃的工资结算问题展开。桐乃工作n天,有m个结算日,她想让一次性拿的钱中最大的最小。题目给出输入输出要求,解题采用二分算法,只需考虑m即可。

【nynu】 妹妹的工资怎么算(二分)

题目链接:http://47.93.252.151/problem.php?id=1148

 

题目描述

《我的妹妹哪有这么可爱!》中的女主叫做高坂桐乃,高坂家的幺女,外表出众、成绩优秀、运动万能的少女,而且还兼职流行杂志的专属模特。阳光的外表下却有着特别的兴趣,是个在意周围眼光的御宅族,喜欢妹系的成人游戏和动梅露露的动画。桐乃有很多的工作,这次她有接到一个模特工作,这次一共工作n天,每天的工资为vi 有m个结算工资的日子,因为桐乃还是初中生所以她可以任意挑选m天来拿工资,但是桐乃每次不想拿太多的钱,所以她想计划使她一次性拿的钱中的最大的最小,(最后一天一定要拿工资)但是她不会分配日子,按照惯例,她找来了哥哥京介进行“人生咨询”,想让哥哥帮忙解决这个问题,哥哥也不怎么会,但是哥哥怎么会拒接妹妹的请求呢,所以他来拜托你解决这个问题。

输入

第一行 两个数 n ,m(m<=n<=100000)

第二行 n个数,vi   (vi<100000)

输出

一个数表示答案

样例输入

5 3
1 2 3 4 5

样例输出

6

提示


解释:1 2 3// 4// 5 //  //为拿工资

 

又是最大最小,果断二分。之前还考虑怎么满足让连续子串和 = 二分的答案,其实不用,因为就算尺取出结果不符,也没办法判断下一步二分是大还是小,所以只考虑m就可以了。果然是签到题,手慢无( •̥́ ˍ •

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100004;
LL a[N], n, m;
bool ok(LL x)
{
    LL sum = 0, c = 0;
    for(LL i = 1; i <= n; i++)
    {
        if(sum + a[i] > x)
        {
            c ++;
            sum = 0;
        }
        sum += a[i];
    }
    if(c < m) return 1;
    return 0;
}
int main()
{
    LL l = 0, r = 1e9;
    scanf("%lld%lld", &n, &m);
    for(LL i = 1; i <= n; i++)
    {
        scanf("%lld", &a[i]);
        l = max(a[i], l);
    }
    while(l <= r)
    {
        LL mid = (l+r)>>1;
        if(ok(mid))
            r = mid - 1;
        else
            l = mid + 1;
    }
    printf("%lld\n", l);
    return 0;
}
posted @ 2018-08-30 10:48 LesRoad 阅读( ...) 评论( ...) 编辑 收藏
* Navicat Premium Data Transfer Source Server : localhost_3306 Source Server Type : MySQL Source Server Version : 80039 Source Host : localhost:3306 Source Schema : nynu_db Target Server Type : MySQL Target Server Version : 80039 File Encoding : 65001 Date: 06/05/2025 09:55:29*/SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for goods_nynu-- ----------------------------DROP TABLE IF EXISTS `goods_nynu`;CREATE TABLE `goods_nynu` ( `goods_id` int(0) NOT NULL AUTO_INCREMENT, `goods_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `goods_price` double(10, 2) NULL DEFAULT NULL, `goods_num` int(0) NULL DEFAULT NULL, `goods_type_id` int(0) NULL DEFAULT NULL, PRIMARY KEY (`goods_id`) USING BTREE, INDEX `goods_type_id`(`goods_type_id`) USING BTREE, CONSTRAINT `goods_nynu_ibfk_1` FOREIGN KEY (`goods_type_id`) REFERENCES `type_nynu` (`type_id`) ON DELETE RESTRICT ON UPDATE RESTRICT) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of goods_nynu-- ----------------------------INSERT INTO `goods_nynu` VALUES (1, '测试用男半袖衬衫', 200.00, 1000, 4);INSERT INTO `goods_nynu` VALUES (2, '测试用男长袖衬衫', 250.00, 100, 5);-- ------------------------------ Table structure for type_nynu-- ----------------------------DROP TABLE IF EXISTS `type_nynu`;CREATE TABLE `type_nynu` ( `type_id` int(0) NOT NULL AUTO_INCREMENT, `type_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `type_level` int(0) NULL DEFAULT NULL, `type_pid` int(0) NULL DEFAULT NULL, `type_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, PRIMARY KEY (`type_id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of type_nynu-- ----------------------------INSERT INTO `type_nynu` VALUES (1, '男装', 1, NULL, '|1|');INSERT INTO `type_nynu` VALUES (2, '女装', 1, NULL, '|2|');INSERT INTO `type_nynu` VALUES (3, '衬衫', 2, 1, '|1|3|');INSERT INTO `type_nynu` VALUES (4, '半袖衬衫', 3, 3, '|1|3|4|');INSERT INTO `type_nynu` VALUES (5, '长袖衬衫', 3, 3, '|1|3|5|');SET FOREIGN_KEY_CHECKS = 1;
05-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值