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

news2024/11/20 6:13:37

【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) { // 如果不需要进行补贴和税收,则输出0
            printf("%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💖点点关注,收藏不迷路💖

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

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

相关文章

Win10 Edge提示兼容性问题打不开|解决浏览器兼容性问题

Edge有时候会与某些安全软件不兼容&#xff0c;导致报错 报错代码&#xff1a;STATUS_INVALID_IMAGE_HASH 解决Edge浏览器兼容性问题方法/步骤&#xff1a; 1、按 Win R 组合键&#xff0c;打开运行&#xff0c;并输入 regedit 命令&#xff0c;确定或回车&#xff0c;可以…

Linux Shell脚本编写指南

大家好&#xff0c;在当今快节奏的科技时代&#xff0c;自动化和高效的工作流程对于个人和组织来说变得愈发重要。而Shell脚本编写作为一种强大且广泛应用的技能&#xff0c;成为了实现自动化任务和系统管理的利器。通过编写Shell脚本&#xff0c;我们可以将繁琐的重复任务自动…

JavaScript的核心语法

JavaScript JavaScript&#xff1a;JavaScript的组成&#xff1a;核心语法&#xff1a;Hello&#xff1a;变量&#xff1a;JS的基本数据类型&#xff1a;特殊点&#xff1a; 数组&#xff1a;流程控制语句&#xff1a;函数&#xff1a;函数的重载&#xff1a;函数的递归:预定义…

算法:226. 翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,1]示例 3&#x…

算法学习笔记(7.4)-贪心算法(区间调度问题)

目录 ##什么是区间调度问题 ##贪心解法 ##具体的例题示例讲解 ##452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; ##435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; ##56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; ##什么是区间调…

学习周报:文献阅读+Fluent案例+Fluent相关算法学习

目录 摘要 Abstract 文献阅读&#xff1a;求解正逆运动波问题的物理信息神经网络 文献摘要 讨论|结论 理论基础 KWM&#xff08;运动波动方程&#xff09; Hard constraint &#xff08;硬约束方式&#xff09; 具有重新分布的搭配点的PINN 具有停止梯度的分数阶方程 …

解决Nginx出现An error occurred问题

每个人遇到Nginx的An error occurred情况可能都不一样&#xff08;见图1&#xff09;&#xff0c;Nginx造成该错误的原因&#xff1a; 1. 我在配置域名解析成IP时&#xff0c;没有把所有解析配置都修改&#xff0c;见图2&#xff1a;解析 *.hanxiaozhang.xyz 配置的是新IP地…

4.通用编程概念

目录 一、变量与常量1.1 变量1.2 常量 二、遮蔽三、数据类型3.1 标量类型1. 整型2. 浮点型3. 布尔类型4.字符类型 3.2 复合类型1. 元组2. 数组 四、函数五、语句和表达式六、函数的返回值 一、变量与常量 1.1 变量 在Rust中默认的变量是不可变的&#xff0c;如果修改其值会导致…

汽车EDI——Volvo EDI 项目案例

项目背景 作为Volvo的长期合作伙伴&#xff0c;C公司收到Volvo的EDI对接邀请&#xff0c;需要实现EDI对接。C公司将会面临哪些挑战&#xff1f;又应该相应地选择何种EDI解决方案呢&#xff1f; 汽车行业强调供需双方的高效协同&#xff08;比如研发设计、生产计划、物流信息等…

BIOS主板(非UEFI)安装fedora40的方法

BIOS主板(非UEFI)安装fedora40的方法 现实困难&#xff1a;将Fedora-Workstation-Live-x86_64-40-1.14.iso写入U盘制作成可启动U盘启动fedora40&#xff0c;按照向导将fedora40安装到真机的sda7分区中得到报错如下内容&#xff1a; Failed to find a suitable stage1 device: E…

最大矩形问题

柱状图中最大的矩形 题目 分析 矩形的面积等于宽乘以高&#xff0c;因此只要能确定每个矩形的宽和高&#xff0c;就能计算它的面积。如果直方图中一个矩形从下标为 i 的柱子开始&#xff0c;到下标为 j 的柱子结束&#xff0c;那么这两根柱子之间的矩形&#xff08;含两端的柱…

论文敲公式敲到“崩溃”?合合信息扫描全能王“公式识别”一键解决公式提取难题

毕业季临近&#xff0c;全国高校毕业生陆续进入了忙碌的“答辩季”。进入“百米冲刺”阶段&#xff0c;论文至关重要。对于理科工学生而言&#xff0c;论文中的数理化公式&#xff0c;稍不注意就容易输错&#xff0c;手动输入误差难以避免。 近日&#xff0c;合合信息旗下扫描…

【C++课程学习】:C++入门(函数重载)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f308;函数重载&#xff1a; &#x1f349;1.参数个数不同&#xff1a; &#x1f349;2.参数…

【计算机视觉(9)】

基于Python的OpenCV基础入门——形态学操作 形态学操作腐蚀膨胀开运算闭运算梯度运算顶帽黑帽 形态学操作代码实现以及效果图 形态学操作 形态学操作是数字图像处理中的一种方法&#xff0c;用于改变和提取图像中的结构和形状信息。它基于图像的形状和大小特征&#xff0c;通过…

【Framework系列】Excel转Json,配置表、导表工具介绍

今天来介绍一下Framework系列的配置部分&#xff0c;这一部分归属于Framework-Design之中。读过《Framework系列介绍》的小伙伴应该了解整个Framework框架是由多个工程项目组成&#xff0c;没看过的小伙伴可以点击链接了解一下。 Framework-Design设计的初衷是给策划同学用的&a…

为Android组件化项目搭建Maven私服

概览 文章目录 概览前言搭建 maven 私服服务器环境jdk安装配置nexus安装配置管理创建存储点、仓库 项目中使用 maven 私服上传 module 到仓库自动发布 module手动上传单个aar包 引用仓库中的 modulebuild.gradle引入远程module FAQ开发阶段有些module用远程依赖&#xff0c;有些…

苹果警告部分 iPhone 用户称他们遭到雇佣间谍软件攻击

苹果警告部分 iPhone 用户称他们遭到“雇佣间谍软件攻击 苹果正在提醒用户注意针对 iPhone 的新一轮已识别雇佣间谍软件攻击。可能的受害者已经收到来自苹果的电子邮件&#xff0c;其中描述了该攻击如何“远程破坏 iPhone”。据路透社报道&#xff0c;印度和其他 91 个国家的受…

内容产品运营方案业务架构解析与实践探索

### 背景 在信息爆炸的时代背景下&#xff0c;内容产品运营成为各行各业竞争的重要环节。构建合理的内容产品运营方案业务架构&#xff0c;能够帮助企业更好地管理内容生产、推广和变现&#xff0c;提升品牌影响力和商业价值。 ### 业务架构设计 #### 1. 内容生产与管理 建立…

一套java开发的(未来工厂核心MES系统成品源码)技术架构:java+springboot 支撑多端管理,可商用

MES定义为“位于上层的计划管理系统与底层的工业控制之间的面向车间层的管理信息系统” 20世纪90年代初期&#xff0c;中国就开始对MES以及ERP的跟踪研究、告知或试点&#xff0c;而且曾经发言 “管控一体化”&#xff0c;“人、财、物、产、供、销”等颇具中国独具一格的CIMS、…

input组件 type为nickname pc端获取不到这个绑定的值?

一、input组件 type为nickname pc端获取不到这个绑定的值&#xff1f; 在pc端 使用input blur 事件获取选择昵称结果失败 代码如下&#xff1a; <input type"nickname" bindblur"binname" name"nickName" placeholder"请输入昵称"…