题目链接:https://www.luogu.org/problemnew/show/P1023

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

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

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

总利润 = 单位商品利润 $\times$ 销量

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

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

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

如在政府预期价上不能得到最大总利润,则输出“NO SOLUTION”。

输入输出样例
输入样例#1:
31
28 130
30 120
31 110
-1 -1
15
输出样例#1:
4
说明
所有数字均小于100000

题解:

首先,不妨计算出从“成本价”到“销量为零的价格”,所有整数单价以及其对应的销量。

设成本价为 $p$,目标售价为 $T_{价格}$ 及其对应销量为 $T_{销量}$,所有可能的售价为 $P_{价格}$ 及其对应销量为 $P_{销量}$,假设补贴(税收)为 $x$,则有:

$(T_{价格}-p+x)T_{销量} \ge (P_{价格}-p+x)P_{销量}$

化为:

$x(T_{销量} - P_{销量}) \ge (P_{价格}-p)P_{销量} - (T_{价格}-p)T_{销量}$

因此,当 $T_{销量} - P_{销量} > 0 $ 时,为 $x \ge [(P_{价格}-p)P_{销量} - (T_{价格}-p)T_{销量}] / (T_{销量} - P_{销量})$;

   当 $T_{销量} - P_{销量} < 0 $ 时,为 $x \le [(P_{价格}-p)P_{销量} - (T_{价格}-p)T_{销量}] / (T_{销量} - P_{销量})$;

这样一来,所有的不等式联立起来,就对 $x$ 有一个区间限定 $[L,R]$,根据这个区间限定选择输出答案即可。

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,double> P;
const double eps=1e-; vector<P> v;
P t;
int lst,d; inline bool equ(double a,double b) {
return fabs(a-b)<eps;
} int main()
{
cin>>t.first; t.second=; P tmp;
while(cin>>tmp.first>>tmp.second)
{
if(tmp.first==- && tmp.second==-) break;
v.push_back(tmp);
}
sort(v.begin(),v.end());
lst=v[].first;
for(int i=,j=,sz=v.size(); j<sz; i++,j++)
{
double a=(v[i].second-v[j].second)/(v[i].first-v[j].first);
double b=v[i].second-v[i].first*a;
for(int x=v[i].first+;x<v[j].first;x++) v.push_back(make_pair(x,a*x+b));
}
sort(v.begin(),v.end());
cin>>d;
while()
{
P last=v.back();
if(last.second-d>) v.push_back(make_pair(last.first+,last.second-d));
else break;
} //for(auto x:v) printf("%d %f\n",x.first,x.second); int pos=lower_bound(v.begin(),v.end(),t)-v.begin(); t=v[pos];
//printf("%d %f\n",t.first,t.second); double L=-1e11,R=1e11;
for(auto p:v)
{
if(p==t) continue;
if(t.second>p.second) {
L=max(L,((p.first-lst)*p.second-(t.first-lst)*t.second)/(t.second-p.second));
}
if(t.second<p.second) {
R=min(R,((p.first-lst)*p.second-(t.first-lst)*t.second)/(t.second-p.second));
}
}
//printf("%f %f\n",L,R); if(L>R) printf("NO SOLUTION\n");
else if(L>) printf("%.0f\n",ceil(L));
else if(R<) printf("%.0f\n",floor(R));
else printf("0\n");
}

Luogu 1023 - 税收与补贴问题 - [数学题]的更多相关文章

  1. 【00NOIP普及组】税收与补贴问题(信息学奥赛一本通 1911)( 洛谷 1023)

    [题目描述] 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给 定的最高价位后,销量以某固定 ...

  2. NOIP200002税收与补贴

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

  3. 洛谷——P1023 税收与补贴问题

    P1023 税收与补贴问题 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最 ...

  4. 洛谷 P1023 税收与补贴问题 (2000NOIP提高组)

    洛谷 P1023 税收与补贴问题 (2000NOIP提高组) 题意分析 一开始没理解题意.啰啰嗦嗦一大堆.看了别人的题解才明白啥意思. 对于样例来说,简而言之: 首先可以根据题目推算出来 28 130 ...

  5. P1023 税收与补贴问题

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

  6. 洛谷P1023 税收与补贴问题

    P1023 税收与补贴问题 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最 ...

  7. [NOIP2000] 提高组 洛谷P1023 税收与补贴问题

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

  8. 洛谷 P1023 税收与补贴问题

    P1023 税收与补贴问题 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最 ...

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

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

随机推荐

  1. iostat中的util和svctm (Two traps in iostat: %util and svctm)

    iostat, from the excellent sysstat suite of utilities, is the go-to tool for evaluating IO performan ...

  2. 单片机成长之路(51基础篇) - 015 关于sdcc的多文件编译范例二

    本文是续 单片机成长之路(51基础篇) - 009 关于sdcc的多文件编译范例(一)编写的. 在实际的工作中,单片机的头文件和功能函数不可能同全部放在同一个文件夹下面,我们把单片机成长之路(51基础 ...

  3. npm 发布包和删除包(2019最新攻略)

  4. SQL SERVER数据库删除LOG文件和清空日志的方案

    原文:SQL SERVER数据库删除LOG文件和清空日志的方案 数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文 ...

  5. Elasticsearch索引mapping的写入、查看与修改(转)

    mapping的写入与查看 首先创建一个索引: curl -XPOST "http://127.0.0.1:9200/productindex" {"acknowledg ...

  6. 【iCore4 双核心板_FPGA】实验十九:使用JTAT UART终端打印信息

    实验指导书及源代码下载地址: 链接:https://pan.baidu.com/s/1c3mqDkW 密码:4x9h iCore4链接:

  7. hdoj:2069

    Coin Change Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. sql日期格式小应用 记录一下

    比如这样的数据 20170317 要转成2017-03-17 单独一步做不到 两步思想 先转成日期格式 在进行格式化 select CONVERT(varchar(10),(CAST(CONVERT( ...

  9. 使用git创建与合并分支

    一.概述 学会使用git命令对项目进行创建分支,并在创建结束后合并到主分支上. 问:为什么要创建分支? 答:在原来的分支上创建一个自己的分支进行开发,在开发完毕后一次性合并到原先的分支,这样既保证安全 ...

  10. 简单的 FastDFS + Nginx 应用实例

    版权声明:本文为GitChat作者的原创文章,未经 GitChat 同意不得转载. https://blog.csdn.net/GitChat/article/details/79479148 wx_ ...