Luogu 1023 - 税收与补贴问题 - [数学题]
题目链接: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 - 税收与补贴问题 - [数学题]的更多相关文章
- 【00NOIP普及组】税收与补贴问题(信息学奥赛一本通 1911)( 洛谷 1023)
[题目描述] 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给 定的最高价位后,销量以某固定 ...
- NOIP200002税收与补贴
试题描述 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递 ...
- 洛谷——P1023 税收与补贴问题
P1023 税收与补贴问题 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最 ...
- 洛谷 P1023 税收与补贴问题 (2000NOIP提高组)
洛谷 P1023 税收与补贴问题 (2000NOIP提高组) 题意分析 一开始没理解题意.啰啰嗦嗦一大堆.看了别人的题解才明白啥意思. 对于样例来说,简而言之: 首先可以根据题目推算出来 28 130 ...
- P1023 税收与补贴问题
题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递 ...
- 洛谷P1023 税收与补贴问题
P1023 税收与补贴问题 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最 ...
- [NOIP2000] 提高组 洛谷P1023 税收与补贴问题
题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递 ...
- 洛谷 P1023 税收与补贴问题
P1023 税收与补贴问题 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最 ...
- Luogu P1023 [NOIp2000提高组]税收与补贴问题 | 数学
题目链接 思路:列不等式组,然后解出不等式,得出答案的取值范围,最后取一个绝对值最小的答案就行了. #include<iostream> #include<cstdio> #i ...
随机推荐
- 每天一个linux命令:chown
1.命令简介 chown(Change owner) 用来改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组.用户可以是用 ...
- ubuntu系统默认源更改为阿里源
from:http://blog.csdn.net/minicto/article/details/62240020 ubuntu系统默认源更改为阿里源 ubuntu默认使用的国外的源,在更新的时候会 ...
- java中random()函数用法介绍
Random() 创建一个新的随机数生成器. 代码如下 复制代码 Random(long seed) 使用单个 long 种子创建一个新的随机数生成器. 我们可以在构造Random对象的时候指定种子 ...
- Python(字符编码)
https://www.cnblogs.com/zihe/p/6993891.html 一 了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开 ...
- fiddler 对https支持
https://www.cnblogs.com/joshua317/p/8670923.html 测试可行
- 【原创 深度学习与TensorFlow 动手实践系列 - 2】第二课:传统神经网络
第二课 传统神经网络 <深度学习>整体结构: 线性回归 -> 神经网络 -> 卷积神经网络(CNN)-> 循环神经网络(RNN)- LSTM 目标分类(人脸识别,物品识别 ...
- Asp.Net百度站长工具的主动推送功能
public static string PostUrl(string[] urls) { try { string formUrl = "http://data.zz.baidu.com/ ...
- eclipse下安装windowbuilder(一定要看)
访问页面https://www.eclipse.org/windowbuilder/download.php,查看更新连接 这个是**连接地址**,要复制粘贴到eclipse里. !! 复制地址!!
- 微信redirect_uri域名与后台配置不一致,错误代码10003
现象 做好了微信公众号扫描登录后,很稳定的运行,后来增加了微信开放平台,结果偶尔就出现了这个redirect_uri错误.然后重启服务器后,又正常. 探查 网上的说法都是网页授权配置的问题,检查微信公 ...
- MongoDB 查询总结
1.含日期查询 从起始时间到结束时间 BasicDBObject queryObj = new BasicDBObject(); queryObj.put("date",new B ...