【计蒜客——复赛A题】贝壳找房函数最值

2023-11-03

 题意:对于结构“f(x)=ax+b”这样的一次函数,我们要做的就是,对“fi(fj(x))=ai(ajx+bj)+bi”这样的可换序嵌套函数求它的最大值f(f(f(......f(x))....)))。

接下来先分享一下令我忧伤的WA让大家快乐一下......

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int T;
int n,x;
struct node
{
    int a,b;
}k[10005];
bool cmp(node exp1, node exp2)
{
    return exp1.a==exp2.a?(exp1.b>exp2.b):(exp1.a<exp2.a);
}
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&x);
        for(int i=0; i<n; i++)
        {
            scanf("%d",&k[i].a);
        }
        for(int i=0; i<n; i++)
        {
            scanf("%d",&k[i].b);
        }
        sort(k, k+n, cmp);
        x%=10;
        for(int i=0; i<n; i++)
        {
            x=(k[i].a*x+k[i].b)%10;
        }
        printf("%d\n",x);
    }
    return 0;
}

    错解思路很清晰,测试样例也都对,但是还就是WA,原因在于,还是没读懂题意,我每次找的都是把倍数最低的放在最前面,然后如果倍数相等,将b大的放在前面,但是显然与题意不符。

    正解我们思考两个f的情况ax+b与cx+d,如此,有两种嵌套方式,分别为:a*(c*x+d)+b 与 c*(a*x+b)+d ,我们比较这两种嵌套方式的不同,总结得:a*(c*x+d)+b=ac*x+ad+b ; c*(a*x+b)+d=ac*x+bc+d,那么如果嵌套函数ff取第一式比较大的话,则ad+b>bc+d。说明第一式与第二式的不同不在于系数而在于ad+bbc+d的大小,即,我们可以根据ai*bj+bi的大小对全体f进行排序。
代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int T;
int n,x;
struct node
{
    int a,b;
    friend bool operator<(node exp1, node exp2)
    {
        if(exp1.a*exp2.b+exp1.b>exp2.a*exp1.b+exp2.b)
        {
            return true;
        }
        else return false;
    }
}k[10005];
priority_queue<node>Q;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        while(!Q.empty())
        {
            Q.pop();
        }
        scanf("%d%d",&n,&x);
        for(int i=0; i<n; i++)
        {
            scanf("%d",&k[i].a);
        }
        for(int i=0; i<n; i++)
        {
            scanf("%d",&k[i].b);
        }
        for(int i=0; i<n; i++)
        {
            Q.push(k[i]);
        }
        x%=10;
        for(int i=0; i<n; i++)
        {
            node now;
            now=Q.top();
            Q.pop();
            x=(now.a*x+now.b)%10;
        }
        printf("%d\n",x);
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【计蒜客——复赛A题】贝壳找房函数最值 的相关文章

  • [JavaScript] 优先队列

    JavaScript 实现优先队列 代码如下 xff1a class Heap constructor cmp 61 a b 61 gt a lt b this arr 61 new Array this cmp 61 a b 61 gt
  • XTU 1262 Fish(优先队列+贪心)

    钓鱼 http 202 197 224 59 exam index php problem read id 1262 题目描述 小明很喜欢钓鱼 xff0c 现在有n个池塘可以钓鱼 xff0c 第i个池塘首次内能钓到ai条鱼 第i个池塘如果被
  • 优先队列(priority_queue)的妙用(以力扣周赛“K 次增加后的最大乘积”为例)

    1 priority queue的用法 优先队列在实际的动态更新过程中帮我们找到最大或者最小的元素 xff0c priority queue的使用需要先包含头文件 lt queue gt xff0c 即 include lt queue g
  • FIFO队列(First In First Out)和优先队列

    queue lt 类型名 gt q q size 返回队列中元素个数 q empty 若队列为空 xff0c 返回true xff0c 否则返回false q pop 删除队首元素 xff0c 但不返回其值 q front 返回队首元素的值
  • Connect the Cities 【HDU - 3371】【Kruskal、变了形的优先队列】

    题目链接 就是问你能否通过选取一些边构成一棵树 最小生成树 这道题的关键不在于此 在于学到了另外一种优先队列的写法 struct cmp bool operator Eddge e1 Eddge e2 return e1 val gt e2
  • 消灭兔子【贪心+堆】

    题目链接 51nod 1191 消灭兔子 兔子这么可爱 怎么能消灭呢 我们可以用贪心的办法来解决这个问题 因为每个箭只能使用一次 所以 我们将兔子血量从高往低排列 先做掉高血量兔子 然后再看低血量兔子 保证了伤害高但是价值小的武器假如在之前
  • LeetCode 1801. 积压订单中的订单总数(C++)

    思路 该题主要是对比销售 采购的价格来进行数组 队列的pop和push操作来实现 采用优先队列来实现排序 其中销售和采购对应小队列和大队列 对于 销售 操作 如果采购的积压订单中有出价格比自己的销售价格高 就出 对于 采购 操作 如果销售的
  • [NOI2010]超级钢琴【RMQ+贪心+堆】

    题目链接 超级棒的一道题 解这道题 需要分一下几步来看 取的是连续段 我们可以对每个可能起点去知道它的最大可能解 起点begin 最大可行解一定是begin L 1 begin R 1中的一个 如果每次都是取最大的话 那么下一个同起点的一定
  • 第十三届蓝桥杯C B组 J:砍竹子

    思路 首先看数据范围 2e5 比较大 而且有一个不变的是 我们每次都从最高的竹子区间开始砍 那么每进行一次砍操作 接着还得再找出最高的竹子区间 代表要有多次排序 所以自然而然想到了一个数据结构 堆 想到 堆 思路就打开了 可以用pair存高
  • 【计蒜客——复赛A题】贝壳找房函数最值

    题意 对于结构 f x ax b 这样的一次函数 我们要做的就是 对 fi fj x ai ajx bj bi 这样的可换序嵌套函数求它的最大值f f f f x 接下来先分享一下令我忧伤的WA让大家快乐一下 include
  • 例说数据结构&STL(七)——priority_queue

    1 白话优先队列 priority queue 前面我们已经相继介绍了双向队列和FIFO特性的队列 这里我们还要接触另一个包含 队列 称呼的数据结构 优先队列 其实这三个数据结构名称看似很像 实则天差万别 通过下面的介绍你就会有很深的体会了
  • 优先队列(堆)

    设计一个程序模仿操作系统的进程管理问题 进 程服务按优先级高的先服务 同优先级的先到先服务的管理 原则 设文件task txt中存放了仿真进程服务请求 其中第 一列是进程任务号 第二列是进程的优先级 1 30 2 20 3 40 4 20
  • Stall Reservations POJ - 3190

    这道题 是学长给我们布置的学习用的题目 重在给我们讲解了什么是优先队列以及其对应的贪心问题 好了 先送上 中文翻译过的题意 手动 滑稽 Oh those picky N 1 lt N lt 50 000 cows They are so p
  • 算法:优先队列-理论

    目录 优先队列 我们平时比较常见的优先队列的场景有什么 优先队列的实现机制 java的优先队列是怎么实现的 优先队列 我们先回忆一下什么是队列 队列 一种先进先出的数据结构 主要关注点在于先入的元素
  • POJ-3253 Fence Repair

    农夫约翰想修理牧场周围的一小段围栏 他测量围栏并认定他需要 1 20000 厚木板 每一个都具有一些整数长度大号我 1 大号我 50000 单元 然后 他购买一块长板足够长 以便看到N块板 即 其长度是长度L i的总和 FJ忽略了 切口 锯
  • [leetcode] 358. Rearrange String k Distance Apart 解题报告

    题目链接 https leetcode com problems rearrange string k distance apart Given a non empty string str and an integer k rearran
  • 数组(六)-- LC[1851] 包含每个查询的最小区间

    1 包含每个查询的最小区间 1 1 题目描述 给你一个二维整数数组 intervals 其中 i n t e r v a l
  • 数据结构与算法-队列

    定义 队列是ListInsert发生表尾 ListDelete发生在表头的线性表 主要操作 入队 出队 术语 表头 队头 表尾 队尾 插入 入队 删除 出队 特点 先入先出 FIFO 插入的位置是length 1 删除的位置的是1 一般读取
  • 蓝桥杯 - 负载均衡

    输入样例 2 6 5 5 1 1 5 3 2 2 2 6 3 1 2 3 4 1 6 1 5 1 3 3 6 1 3 4 输出样例 2 1 1 1 1 0 解析 优先队列 排序规则为任务结束的时间 在新任务的时候 弹出已经结束的任务 并且恢
  • 八大排序算法(六)——优先队列、堆和堆排序

    6 1 API 优先队列是一种抽象数据类型 它表示了一组值和对这些值的操作 优先队列最重要的操作就是删除最大元素和插入元素 6 2 初级实现 6 2 1 数组实现 无序 或许实现优先队列最简单方法就是基于下压栈的代码 insert 方法的代

随机推荐

  • JAVA代码编写哈夫曼编码实现数据和文件的压缩和解压算法

    压缩算法思路 1 将待压缩的字符串变成字节数组 byte contentBytes 2 将字节数组每个字符出现的次数统计出来变为Node类 value为字符对应的Ascci码 weight为字符出现的次数也是哈夫曼树的权值 存入List集合
  • Kibana导出csv数据

    适用版本 ElasticSearch 6 8 0 Kibana 6 8 0 导出CSV文件配置 kibana配置文件 添加以下配置 xpack reporting csv maxSizeBytes 209715200 csv文件大小 默认为
  • SQL注入-盲注(布尔盲注与时间盲注)

    目录 一 什么是盲注 二 盲注的分类 三 利用盲注的前提条件 四 盲注的优缺点 五 基于布尔类型的盲注 1 什么情况下使用布尔类型的盲注 2 使用布尔类型盲注的操作步骤 3 布尔类型盲注的操作过程 以获取当前数据库为例 4 使用其他函数进行
  • iview—Table表格render 渲染

    1 序号 2 if判断 a标签 3 if判断 Input输入 4 renderHeader自定义列头的点击事件 render的Input点击事件 nativeOn click 5 正常列 6 按钮Button 7 复选框Checkbox 8
  • VSCode 远程开发:WLS 2 + ZeroTier 内网穿透

    前置条件 两台 Win 10 主机 其中一台 记为本地机 远程访问另一台主机 记为远程机 的 WSL 本地机安装好 VSCode 两台主机不在一个局域网内 且均无公网 IP 后续需要在两台主机上配置内网穿透 如果两台主机可相互 ping 通
  • Java 数据库编程 ResultSet 的 使用方法

    结果集 ResultSet 是数据中查询结果返回的一种对象 可以说结果集是一个存储查询结果的对象 但是结果集并不仅仅具有存储的功能 他同时还具有操纵数据的功能 可能完成对数据的更新等 结果集读取数据的方法主要是getXXX 他的参数可以使整
  • C++ string替换指定字符

    string自带replace 方法并没有实现这一功能 需要借助
  • git commit时权限被否定问题解决

    今天在提交博客时 git commit m 时出现了一些问题 问题如下 could not open git COMMIT EDITMSG Permission denied 意思大概就是无法打开 git COMMIT EDITMSG 权限
  • Java8 HashMap底层原理

    一 树集结构 1 1二叉查找树 二叉查找树 BST 具备什么特性呢 1 左子树上所有结点的值均小于或等于它的根结点的值 2 右子树上所有结点的值均大于或等于它的根结点的值 3 左 右子树也分别为二叉排序树 查找效率 二叉查找树查找的最大次数
  • Macbook配置工作环境

    Xcode 在App Store中搜索Xcode 下载安装 安装包大概6G 无需配置 直接App Store中安装即可 速度取决于网速 iterm2 mac下较好用的终端 下载地址 使用和配置文档参照 https iterm2 com in
  • Docker+Linux_Centos(内核:3.10.0-957.1.3.el7.x86_64)安装

    前言声明 如果您有更好的技术与作者分享 或者商业合作 请访问作者个人网站 http www esqabc com view message html 留言给作者 如果该案例触犯您的专利 请在这里 http www esqabc com vi
  • DBSCAN算法研究(2)--matlab代码实现

    DBSCAN聚类算法三部分 1 DBSCAN原理 流程 参数设置 优缺点以及算法 http blog csdn net zhouxianen1987 article details 68945844 2 matlab代码实现 blog ht
  • Python、Java的一些区别

    共同点 二者都是面向对象的编程语言 二者都是解释型语言 说明 解释型语言释义 程序不需要编译 而是在运行时一句一句翻译成机器语言 每运行一次都要翻译一次 所以效率相比较低 不同点 Python是弱类型语言 而Java是强类型语言 说明 强类
  • Vue 父组件中触发子组件的方法

    Vue 父组件中触发子组件的方法 使用场景 在父组件点击子组件时 触发子组件的初始化方法 方式一 子组件中使用 ref 属性
  • arch linux windows,使用ArchWSL在微软Windows WSL上运行Arch Linux系统

    本文教您在微软Windows WSL上运行Arch Linux系统的方法 ArchWSL使ArchLinux作为WSL实例 支持多次安装 本文操作步骤为 安装用于Linux的Windows子系统 前往GitHub下载ArchWSL 解压缩下
  • 哈夫曼树实现文件的压缩与解压缩

    利用哈夫曼树实现文件的压缩与解压缩 压缩 1 统计出文件中相同字符出现的次数 2 获取哈夫曼编码 次数作为权值构建哈夫曼树 3 重新编码 写回压缩文件 保存头文件 源文件后缀 编码信息的行数 每个字符的权 保存编码 解压缩 1 获取原文件后
  • 超详细Shell学习教程第三篇

    1 1shell脚本创建 下面讲解创建shell脚本 并赋予脚本可执行权限 写一个脚本实现创建文件夹 如果文件夹不存在 mkdir sh if d html then mkdir html elif d html1 then mkdir h
  • 比较快速排序和归并排序

    虽然归并排序和快速排序的时间复杂度都为O nlogn 但实际上快速排序的速度会比归并排序快2 3倍 原因如下 1 归并排序在执行时 需要一个额外的temp数组去拷贝原数组的数据 会大量占用程序的空间 2 快速排序再运行时 实际上是直接再原数
  • 信息安全之SQL注入攻击

    目录 一 简介 二 案例 1 案例1 SQL恶意填入 2 案例2 危险字符注入 三 预防 1 过滤特殊字符 2 严格使用参数绑定 3 合理使用框架防注入机制 一 简介 SQL注入是注入式攻击中的常见类型 SQL注入式攻击是未将代码与数据进行
  • 【计蒜客——复赛A题】贝壳找房函数最值

    题意 对于结构 f x ax b 这样的一次函数 我们要做的就是 对 fi fj x ai ajx bj bi 这样的可换序嵌套函数求它的最大值f f f f x 接下来先分享一下令我忧伤的WA让大家快乐一下 include