当前位置: 首页 > news >正文

【NOIP普及组】税收与补贴问题

【NOIP普及组】税收与补贴问题


💖The Begin💖点点关注,收藏不迷路💖

每样商品的价格越低,其销量就会相应增大。现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递减。(我们假设价格及销售量都是整数)

对于某些特殊商品,不可能完全由市场去调节其价格。这时候就需要政府以税收或补贴的方式来控制。(所谓税收或补贴就是对于每个产品收取或给予生产厂家固定金额的货币)问题求解:
你是某家咨询公司的项目经理,现在你已经知道政府对某种商品的预期价格,以及在各种价位上的销售情况。要求你确定政府对此商品是应收税还是补贴的最少金额(也为整数),才能使商家在这样一种政府预期的价格上,获取相对其他价位上的最大总利润。

    总利润=单位商品利润*销量单位商品利润=单位商品价格-单位商品成本(-税金  or  +补贴)

输入:

第一行为政府对某种商品的预期价,第二行有两个整数,第一个整数为商品成本,第二个整数为以成本价销售时的销售量,以下若干行每行都有两个整数,第一个为某价位时的单价,第二个为此时的销量,以一行-1,-1表示所有已知价位及对应的销量输入完毕,输入的最后一行为一个单独的整数表示在已知的最高单价外每升高一块钱将减少的销量。

输出:

输出有两种情况:若在政府预期价上能得到最大总利润,则输出一个单独的整数,数的正负表示是补贴还是收税,数的大小表示补贴或收税的金额最小值。若有多解,取绝对值最小的输出。
如在政府预期价上不能得到最大总利润,则输出“NO SOLUTION”。

样例输入:

31
28 130
30 120
31 110
-1  -1
15

样例输出:

4
#include <stdio.h>
#include <stdlib.h>#define N 100005 // 定义数组长度的常量typedef struct { // 定义节点结构体int c, num; // c表示单价,num表示销量
} Node;int targetC, targetNum, cut, cnt; // targetC为政府预期价,targetNum为政府预期价对应的销量,cut为每升高一块钱将减少的销量,cnt表示数组中节点个数
Node nodes[N]; // 定义节点数组int compare(const void *a, const void *b) { // 定义比较函数return ((Node*)b)->num - ((Node*)a)->num; // 根据销量从大到小排序
}void solve() { // 求解最优税收或补贴的函数int ans = 0, p, q, x, y; // ans表示税收或补贴的金额,p、q、x、y都是中间变量int flag1 = 0, flag2 = 0; // flag1、flag2表示是否需要进行税收或补贴while (1) { // 迭代直到得到最优解flag1 = 0, flag2 = 0;p = (targetC - nodes[0].c + ans) * targetNum; // 计算政府预期价下,所有节点的总销售额(不考虑税收或补贴)q = (targetC - nodes[0].c - ans) * targetNum; // 计算政府预期价下,所有节点的总销售额(不考虑税收或补贴)for (int i = 0; i < cnt; i++) { // 遍历所有节点if (nodes[i].num <= 0) // 如果该节点销量为0,跳出循环break;x = (nodes[i].c - nodes[0].c + ans) * nodes[i].num; // 计算该节点在政府预期价下的总销售额(不考虑税收或补贴)y = (nodes[i].c - nodes[0].c - ans) * nodes[i].num; // 计算该节点在政府预期价下的总销售额(不考虑税收或补贴)if (x > p) // 如果该节点在政府预期价下销售额高于所有节点的总销售额,需要进行补贴flag1 = 1;if (y > q) // 如果该节点在政府预期价下销售额低于所有节点的总销售额,需要进行税收flag2 = 1;if (flag1 && flag2) // 如果需要进行补贴和税收,则跳出循环break;}if (flag1 && flag2) { // 如果需要进行补贴和税收,则增加税收或补贴的金额ans++;continue;}x = nodes[cnt-1].c; // 获取最高价位y = nodes[cnt-1].num; // 获取最高价位对应的销量while (y > 0) { // 不断增加税收或补贴的金额,直到找到最优解x++; // 增加单价y -= cut; // 减少销量if ((x - nodes[0].c + ans) * y > p) // 如果补贴金额太小导致总销售额低于政府预期价下的总销售额,需要进行补贴flag1 = 1;if ((x - nodes[0].c - ans) * y > q) // 如果税收金额太小导致总销售额高于政府预期价下的总销售额,需要进行税收flag2 = 1;if (flag1 && flag2) // 如果需要进行补贴和税收,则跳出循环break;}if (flag1 && !flag2) { // 如果需要进行补贴但不需要进行税收,则输出补贴金额printf("%d\n", -ans);return;}if (!flag1 && flag2) { // 如果需要进行税收但不需要进行补贴,则输出税收金额printf("%d\n", ans);return;}if (!flag1 && !flag2) { // 如果不需要进行补贴和税收,则输出0printf("%d\n", ans);return;}ans++; // 增加税收或补贴的金额}
}int main() { // 主函数scanf("%d", &targetC); // 输入政府预期价int x, y;while (1) { // 输入所有节点scanf("%d %d", &x, &y);if (x == -1 && y == -1) // 如果输入-1,-1则结束输入break;nodes[cnt].c = x;nodes[cnt].num = y;cnt++;}scanf("%d", &cut); // 输入每升高一块钱将减少的销量qsort(nodes, cnt, sizeof(Node), compare); // 对节点按销量从大到小排序for (int i = 0; i < cnt - 1; i++) { // 补全缺失的节点if (nodes[i+1].c - nodes[i].c > 1) { // 如果两个节点之间存在空缺for (int j = nodes[i].c + 1; j < nodes[i+1].c; j++) { // 在两个节点之间插入节点nodes[cnt].c = j;nodes[cnt].num = nodes[i].num - (nodes[i].num - nodes[i+1].num) / (nodes[i+1].c - nodes[i].c) * (j - nodes[i].c);cnt++;}}}qsort(nodes, cnt, sizeof(Node), compare); // 再次对节点按销量从大到小排序int targetExists = 0;for (int i = 0; i < cnt; i++) { // 查找政府预期价对应的销量if (nodes[i].c == targetC) {targetExists = 1;targetNum = nodes[i].num;break;}}if (!targetExists) // 如果政府预期价对应的销量不存在,需要根据最高价位和每升高一块钱将减少的销量来计算targetNum = nodes[cnt-1].num - (targetC - nodes[cnt-1].c) * cut;solve(); // 求解最优税收或补贴return 0;
}

求解最优税收或补贴的问题。主要思想如下:

  1. 定义节点结构体,包含单价和销量两个属性。
  2. 定义全局变量,包括政府预期价、政府预期价对应的销量、每升高一块钱将减少的销量等。
  3. 输入政府预期价和节点信息,并对节点按销量从大到小进行排序。
  4. 补全可能存在的节点缺失,并再次按销量从大到小进行排序。
  5. 查找政府预期价对应的销量,如果不存在,则根据最高价位和每升高一块钱将减少的销量来计算。
  6. 使用solve函数求解最优税收或补贴。迭代过程中,比较各节点在政府预期价下的销售额与所有节点总销售额的大小,判断是否需要进行补贴和税收。增加税收或补贴的金额,直到找到最优解。
  7. 输出最优税收或补贴的金额。

总体来说,该代码通过迭代的方式,不断调整税收或补贴的金额,直到找到最优解。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

相关文章:

【NOIP普及组】税收与补贴问题

【NOIP普及组】税收与补贴问题 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 每样商品的价格越低&#xff0c;其销量就会相应增大。现已知某种商品的成本及其在若干价位上的销量&#xff08;产品不会低于成本销售&#xff09;&#xff0c;…...

Docker 部署 mysql 服务

linux用法 Container&#xff08;容器&#xff09;集合成 Services&#xff08;服务&#xff09; 交互集合成 Stack&#xff08;堆栈&#xff09;卸载可能存在的旧版本 sudo apt-get update使apt可以通过HTTPS使用存储库&#xff08;repository&#xff09; sudo apt-get ins…...

01- Redis 中的 String 数据类型和应用场景

1. 介绍 String 是最基本的 key-value 结构&#xff0c;key 是唯一标识&#xff0c;value 是具体的值&#xff0c;value 其实不仅是字符串&#xff0c;也可以是数字&#xff08;整数或浮点数&#xff09;&#xff0c;value 最多可以容纳的数据长度是 512M。 2. 内部实现 Str…...

Android音频焦点

什么是音频焦点&#xff1f; 音频焦点是 API 8 中引入的一个概念。它用于传达这样一个事实&#xff1a;用户一次只能专注于一个音频流&#xff0c;例如收听音乐或播客&#xff0c;但不能同时关注两者。在某些情况下&#xff0c;多个音频流可以同时播放&#xff0c;但只有一个是…...

Docker安全配置

Docker安全及日志管理 文章目录 Docker安全及日志管理资源列表基础环境一、Docker安全相关介绍1.1、Docker容器与虚拟机的区别1.1.1、隔离与共享1.1.2、性能与损耗 1.2、Docker存在的安全问题1.2.1、Docker自身漏洞1.2.2、Docker源码问题 1.3、Docker架构缺陷与安全机制1.3.1、…...

文件上传之使用一个属性接收多个文件

在开发过程中&#xff0c;可能遇到这样的业务&#xff1a;文件上传时个数不定&#xff0c;这样我们不能枚举出所有的文件name&#xff0c;这种情况下我们可以使用一个name将所有的文件接收下来&#xff1b; html代码 <!DOCTYPE html> <html lang"en"> …...

chat4-Server端保存聊天消息到mysql

本文档描述了Server端接收到Client的消息并转发给所有客户端或私发给某个客户端 同时将聊天消息保存到mysql 服务端为当前客户端创建一个线程&#xff0c;此线程接收当前客户端的消息并转发给所有客户端或私发给某个客户端同时将聊天消息保存到mysql 本文档主要总结了将聊天…...

vivo鄢楠:基于OceanBase 的降本增效实践

在3 月 20 日的2024 OceanBase 数据库城市行中&#xff0c;vivo的 体系与流程 IT 部 DBA 组总监鄢楠就“vivo 基于 OceanBase 的降本增效实践”进行了主题演讲。本文为该演讲的精彩回顾。 vivo 在1995年于中国东莞成立&#xff0c;作为一家全球领先的移动互联网智能终端公司&am…...

arm cortex-m架构 SVC指令详解以及其在freertos的应用

1. 前置知识 本文基于arm cortex-m架构描述&#xff0c; 关于arm cortex-m的一些基础知识可以参考我另外几篇文章&#xff1a; arm cortex-m 架构简述arm异常处理分析c语言函数调用规范-基于arm 分析 2 SVC指令 2.1 SVC指令位域表示 bit15 - bit12&#xff1a;条件码&#…...

k8s笔记——kubernetes中的三种IP

kubernetes概念 Master&#xff1a;集群控制节点&#xff0c;每个集群需要至少一个master节点负责集群的管控 Node&#xff1a;工作负载节点&#xff0c;由master分配容器到这些node工作节点上&#xff0c;然后node节点上的docker负责容器的运行 Pod&#xff1a;kubernetes的…...

Golang | Leetcode Golang题解之第127题单词接龙

题目&#xff1a; 题解&#xff1a; func ladderLength(beginWord string, endWord string, wordList []string) int {wordId : map[string]int{}graph : [][]int{}addWord : func(word string) int {id, has : wordId[word]if !has {id len(wordId)wordId[word] idgraph a…...

微服务中feign远程调用相关的各种超时问题

1. 引言 在spring cloud微服中&#xff0c;feign远程调用可能是大家每天都接触到东西&#xff0c;但很多同学却没咋搞清楚这里边的各种超时问题&#xff0c;生产环境可能会蹦出各种奇怪的问题。 首先说下结论&#xff1a; 1)只使用feign组件&#xff0c;不使用ribbion组件&…...

springboot整合chatgpt,并且让其可以记录上下文

整合很简单&#xff0c;不过需要几个小条件 1.必须要有openai官方的key 2.国内需要有代理服务器或者国外的服务器把项目部署出去也没问题 我没有使用spring的springAI&#xff0c;听说很方便&#xff0c;日后有机会去体验体验&#xff0c;我今天用了两种方式整合了gpt 1.Ch…...

CTP前端:解码数字世界的魔法师

CTP前端&#xff1a;解码数字世界的魔法师 CTP前端&#xff0c;一个充满神秘与魅力的职业&#xff0c;他们在数字世界中挥舞着魔法棒&#xff0c;创造着令人惊叹的奇迹。那么&#xff0c;CTP前端究竟是做什么的呢&#xff1f;让我们从四个方面、五个方面、六个方面和七个方面&…...

rabbitmq的交换机类型以及他们的区别

RabbitMQ中有四种主要的交换机类型&#xff0c;它们是&#xff1a;Direct&#xff0c;Topic&#xff0c;Fanout&#xff0c;Headers。 Direct&#xff08;直连交换机&#xff09;&#xff1a;接收到消息后&#xff0c;会将消息发送到与消息的routing key完全匹配的队列上。Dire…...

理解不同层的表示(layer representations)

在机器学习和深度学习领域&#xff0c;特别是在处理音频和自然语言处理&#xff08;NLP&#xff09;任务时&#xff0c;"层的表示"&#xff08;layer representations&#xff09;通常是指神经网络不同层在处理输入数据时生成的特征或嵌入。这些表示捕获了输入数据的…...

原生js访问http获取数据的方法

在原生JavaScript中&#xff0c;直接通过浏览器端的JavaScript访问HTTP接口获取数据通常涉及XMLHttpRequest对象或现代的fetch API。 1. 使用XMLHttpRequest XMLHttpRequest是一个老旧的API&#xff0c;但在某些情况下仍然很有用。以下是一个简单的例子&#xff1a; javascr…...

Windows 2000 Server:安全配置终极指南

"远古技术&#xff0c;仅供娱乐" &#x1f4ad; 前言&#xff1a;Windows 2000 服务器在当时的市场中占据了很大的比例&#xff0c;主要原因包括操作简单和易于管理&#xff0c;但也经常因为安全性问题受到谴责&#xff0c;Windows 2000 的安全性真的那么差吗&#x…...

基于 FastAI 文本迁移学习的情感分类(93%+Accuracy)

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…...

集成Google Authenticator实现多因素认证(MFA)

目录 参考1、应用背景2、多因素认证3、谷歌google authenticator集成用法3.1、原理3.2、 MFA绑定3.2.1、 用户输入用户名密码登录3.2.2、检查是否已经绑定MFA&#xff08;检查数据库是否保存该用户的google secret&#xff09;3.2.3、谷歌身份证认证器扫描绑定3.2.4、手动测试验…...

网关(Gateway)- 自定义过滤器工厂

自定义过滤工厂类 DemoGatewayFilterFactory package com.learning.springcloud.custom;import org.apache.commons.lang.StringUtils; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilterChai…...

HTML静态网页成品作业(HTML+CSS)—— 香奈儿香水介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…...

C++11 lambda表达式和包装器

C11 lambda表达式和包装器 一.lambda表达式1.lambda表达式的引入2.基本语法和使用1.基本语法2.使用1.传值捕捉的错误之处2.传引用捕捉 3.lambda表达式的底层原理4.lambda的特殊之处5.lambda配合decltype的新玩法 二.function包装器1.概念2.包装函数1.包装普通函数2.包装成员函数…...

3. MySQL 数据表的基本操作

文章目录 【 1. MySQL 创建数据表 】【 2. MySQL 查看表 】2.1 查看表的属性DESCRIBE/DESC 以表格的形式展示表属性SHOW CREATE TABLE 以SQL语句的形式展示表属性 2.2 查看表的内容 【 3. MySQL 修改数据表结构 】3.1 修改表名3.2 修改表字符集3.3 添加字段在末尾添加字段在开头…...

Linux命令篇(一):文件管理部分

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 1、cat命令常用参…...

IP协议1.0

基本概念&#xff1a; • 主机: 配有IP地址, 但是不进⾏路由控制的设备; • 路由器: 即配有IP地址, ⼜能进⾏路由控制; • 节点: 主机和路由器的统称; IP协议的报头 • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. • 4位头部⻓度(header length): IP头部的⻓…...

源码编译安装LNMP

LNMP包含&#xff1a; linux、Nginx、Mysql、php LNMP的工作原理 &#xff1a; 由客户端发送页面请求给Nginx&#xff0c;Nginx会根据location匹配用户访问请求的URL路径判断是静态还是动态&#xff0c;静态的一般是以 .html .htm .css .shtml结尾&#xff0c;动态的一般是以 .…...

安装Chrome扩展程序来 一键禁用页面上的所有动画和过渡。有那些扩展程序推荐一下

要安装Chrome扩展程序来一键禁用页面上的所有动画和过渡&#xff0c;以下是一些推荐的扩展程序&#xff1a; Toggle CSS Animations and Transitions 功能&#xff1a;此扩展程序允许用户轻松地在网页上切换CSS动画和过渡的开启与关闭状态。使用方法&#xff1a;安装后&#x…...

读人工智能时代与人类未来笔记19_读后总结与感想兼导读

1. 基本信息 人工智能时代与人类未来 (美)亨利基辛格,(美)埃里克施密特,(美)丹尼尔胡滕洛赫尔 著 中信出版社,2023年6月出版 1.1. 读薄率 书籍总字数145千字&#xff0c;笔记总字数39934字。 读薄率39934145000≈27.5% 1.2. 读厚方向 千脑智能 脑机穿越 未来呼啸而来 …...

个人影响力

华人出了个黄仁勋&#xff0c;世界级影响力&#xff0c;还是近代华人历史首次出现具有如此影响力的人。凭借的逻辑是什呢&#xff1f;在人工智能领域有巨大影响力。...