【题目描述】

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

对于某些特殊商品,不可能完全由市场去调节其价格。这时候就需要政府以税收或补贴的方式来控制。(所谓税收或补贴就是对于每个产品收取或给予生产厂家固定金额的货币)

问题求解:

你是某家咨询公司的项目经理,现在你已经知道政府对某种商品的预期价格,以及在各 种价位上的销售情况。要求你确定政府对此商品是应收税还是补贴的最少金额(也为整数),才能使商家在这样一种政府预期的价格上,获取相对其他价位上的最大总利润。

总利润=单位商品利润*销量

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

【输入】

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

【输出】

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

【输入样例】

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

【输出样例】

4


首先,这题的本质是一个数学题,其思想为设一个未知数x,然后列为无数个的不等式,所有不等式都要求使政府预算的那个价格的总利润大于其他价格的总利润,这样便可以解出x的范围,min<=x<=max,然后根据min和max的正负号来决定输出哪个。

以样例为例,我们要求

(31-28+x)*110>=(28-28+x)*130

(31-28+x)*110>=(29-28+x)*125

(31-28+x)*110>=(30-28+x)*120

(31-28+x)*110>=(32-28+x)*95

 #include<bits/stdc++.h>
using namespace std;
int price[],num[];
int main()
{
int pre,x,y;cin>>pre;
cin>>price[]>>num[];
int m=,jian;
double umax=1e9,umin=-1e9;//注意这边是double类型,一开始定义错了还查了很久
while(cin>>x>>y&&(x!=-||y!=-))
{
if(x-price[m]==)
{
price[++m]=x;
num[m]=y;
}
else
{
int kxy=-(num[m]-y)/(x-price[m]);//kxy为中间每差1元减少的销量
while(price[m]<x)
{
price[++m]=price[m-]+;
num[m]=num[m-]+kxy;
}
}
}
cin>>jian;
int tmpn=num[m],tmpp=price[m],k=;
while(tmpn-jian>)
{
++m;++tmpp;
price[m]=tmpp;
tmpn-=jian;
num[m]=tmpn;
}
for(int i=;i<=m;i++)
if(price[i]==pre)
{
k=i;
break;
}
if(k==)
{
cout<<"NO SOLUTION";
return ;
}
for(int i=;i<k;i++)
if((double)((num[k]*(price[k]-price[])-num[i]*(price[i]-price[]))/(double)(num[i]-num[k]))<=umax)
umax=(double)(num[k]*(price[k]-price[])-num[i]*(price[i]-price[]))/(double)(num[i]-num[k]);
//(预估价的总利润-某价位上的总利润)/(某价位销量-预估价销量)=应该收的RMB
//这个地方不理解的话建议解一下上文列出的不等式
for(int i=k+;i<=m;i++)
if((double)((num[i]*(price[i]-price[])-num[k]*(price[k]-price[]))/(double)(num[k]-num[i]))>=umin)
umin=(double)(num[i]*(price[i]-price[])-num[k]*(price[k]-price[]))/(double)(num[k]-num[i]);
//(某价位上的总利润-预估价的总利润)/(预估价销量-某价位销量)=应该补贴的RMB
if(umax<umin)cout<<"NO SOLUTION";//解集为空
else if(umax<)printf("%.0f",floor(umax));//需要补贴的情况
else if(umin>)printf("%.0f",ceil(umin));//需要收税的情况
else cout<<"";//若不需要补贴或收税
return ;
}

//参考:洛谷 P1023 税收与补贴问题 - sdfzrlt的博客 - CSDN博客
https://blog.csdn.net/rlt1296/article/details/52788630
P1023 税收与补贴问题 题解
https://www.luogu.org/problemnew/solution/P1023

【00NOIP普及组】税收与补贴问题(信息学奥赛一本通 1911)( 洛谷 1023)的更多相关文章

  1. 【18NOIP普及组】对称二叉树(信息学奥赛一本通 1981)(洛谷 5018)

    [题目描述] 一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树: 1.二叉树: 2.将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等. 下图中节点内的数字为权值,节点外 ...

  2. 【13NOIP提高组】转圈游戏(信息学奥赛一本通 1875)(洛谷 1965)

    题目描述 nn 个小描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号 ...

  3. 【11NOIP提高组】选择客栈(信息学奥赛一本通 1546)(洛谷 1311)

    题目描述 丽江河边有nn家很有特色的客栈,客栈按照其位置顺序从 11到nn编号.每家客栈都按照某一种色调进行装饰(总共 kk 种,用整数 00 ~k-1k−1 表示),且每家客栈都设有一家咖啡店,每家 ...

  4. $ybt\ 【信息学奥赛一本通】题解目录$

    [信息学奥赛一本通]题解目录 $ \large -> OJ$ $ problem1000 $ \(Answer\) - > $ \large 1000$ $ problem1001 $ \ ...

  5. 【00NOIP普及组】计算器的改良(信息学奥赛一本通 1910)(洛谷 1022)

    [题目描述] NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先 ...

  6. 【03NOIP普及组】栈(信息学奥赛一本通 1924)(洛谷 1044)

    #include<bits/stdc++.h> using namespace std; int n,ans,m,k,ans2; ],f[],d[][],num[][],tmp[],s[] ...

  7. 「SDOI2014」旅行(信息学奥赛一本通 1564)(洛谷 3313)

    题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我 ...

  8. Luogu P1023 [NOIp2000提高组]税收与补贴问题 | 数学

    题目链接 思路:列不等式组,然后解出不等式,得出答案的取值范围,最后取一个绝对值最小的答案就行了. #include<iostream> #include<cstdio> #i ...

  9. 【04NOIP普及组】火星人(信息学奥赛一本通 1929)(洛谷 1088)

    [题目描述] 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法.这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类 ...

随机推荐

  1. 科普帖:Linux操作系统

    使用计算机必然会接触操作系统,现代操作系统已经发展的十分成熟,一般用户都可以很轻松的使用计算机.然而,对于要利用计算机进行专业开发和应用的用户来说,需要更加深入地理解操作系统的原理和运行机制,这样才能 ...

  2. 英文FRAUNCE法国FRAUNCE单词

    France Alternative forms Fraunce In Fraunce, the inhabitants of one city were driven out and forced ...

  3. 【TBarCode SDK教程】TBarCode SDK 如何在 Microsoft Office 中工作?

    使用条形码软件组件 TBarCode SDK,你可以在 Microsoft Office 中快速且简便地创建各种条形码.都不需要任何编程的技巧,只需要点击几次鼠标就可以将TBarCode SDK集成到 ...

  4. robotframework的学习笔记(十八)——RequestsLibrary库的API介绍

    requestsLibrary的关键字不多,常用的就几个. Create Session: 创建一个session,连接某个服务器.Create Ntlm Session: 也是创建一个session ...

  5. CRC-CCITT CRC-16

    CRC分为以下几种标准: CRC-12码 CRC-16码 CRC-CCITT码 CRC-32码 在线CRC计算器 https://www.lammertbies.nl/comm/info/crc-ca ...

  6. C语言知识点拾遗

    sleep() abort() fflush() getimeofday() sigaction() Linux 进程学习(四)------ sigaction 函数 malloc() 如何实现一个m ...

  7. 3.live555源码分析----延时队列

    live555本身是一个单进程.单线程的服务器,但是它能够完美的让多个客户端同时连接,除了使用select并发编程以外,延时队列是很重要的手段. 当连接一个客户端,进行视频帧传输的时候,是不能持续进行 ...

  8. nginx反向代理前后端分离项目(后端多台)

    目前软件架构都比较流行前后端分离,前后端的分离也实现了前后端架构的分离,带来的好处 —— 整个项目的开发权重往前移,实现真正的前后端解耦,动态资源和静态资源分离,提高了性能和扩展性. 通常Spring ...

  9. scrapy 爬虫中间件-offsite和refer中间件

    环境使用anaconda 创建的pyithon3.6环境 mac下 source activate python36 mac@macdeMacBook-Pro:~$ source activate p ...

  10. go调度: 第一部分-OS调度(操作系统调度)

    开场白 这个是三篇博客中的第一篇, 用来提供go调度背后的机制和语法. 这篇博客主要关注操作系统调度. 三篇博客的顺序是: 1) go调度: 第一部分 - 操作系统调度 2) go调度: 第二部分 - ...