洛谷 P1023 税收与补贴问题 (2000NOIP提高组)
洛谷 P1023 税收与补贴问题 (2000NOIP提高组)
题意分析
一开始没理解题意。啰啰嗦嗦一大堆。看了别人的题解才明白啥意思。
对于样例来说,简而言之:
首先可以根据题目推算出来
28 130
29 125
30 120
31 110
32 95
33 80
34 65
35 50
36 35
37 20
38 5
表示在某个金额时的销量。在金钱为39的时候,销量为负数,肯定是不能盈利的。
我们假设题目所求的补贴/收税金额为x(正数表示补贴,负数表示收税),那么题目要求我们算出绝对值最小的x,使得下列不等式均成立。
(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 >= (31 - 28 + x) * 110
(31-28 + x) * 110 >= (32 - 28 + x) * 95
……
(31-28 + x) * 110 >= (38 - 28 + x) * 5
说白了,就是让商家在政府制定的价格时盈利最多,那么商家肯定愿意在那个价格卖。那么问题就是如何求出这个x。
其实如果算出来每个价格对应的销量之后,那么我们只需要求解下面的方程,一定可以解除min<=x<=max。然后就可以找到x绝对值最小的数。
并且根据政府期望商家卖的价钱分为两部分,第一部分求得最小值,第二部分求得最大值,即可。
代码总览
#include <bits/stdc++.h>
#define nmax
using namespace std;
typedef struct item{
int Price;
int Sales;
}item;
int GovPrice = 0;
int Cost = 0, SalesAtCost = 0,TargetSales = 0;
int TempPrice = 0, TempSales = 0;
int DecreaseMount = 0;
vector<item> v;
bool cmp(item a, item b)
{
return a.Price<b.Price;
}
void PricePocess()
{
int tag = v.size();
int gapNum,gapDec;
item head,tail;
for(int i = 0;i<tag-1;++i){
head = v[i];
tail = v[i+1];
gapNum = tail.Price - head.Price;
if(gapNum == 1) continue;
else{
gapDec = (tail.Sales - head.Sales) / gapNum;
int Temp = head.Sales;
for(int j = 1;j<gapNum;++j){
Temp+=gapDec;
v.push_back({head.Price+j,Temp});
}
}
}
sort(v.begin(),v.end(),cmp);
tag = v.size();
TempPrice = v[tag-1].Price;
TempSales = v[tag-1].Sales;
while(1){
TempPrice++;
TempSales-=DecreaseMount;
if(TempPrice<=0 || TempSales<=0) break;
else{
v.push_back({TempPrice,TempSales});
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
v.clear();
scanf("%d",&GovPrice);
scanf("%d %d",&Cost,&SalesAtCost);
v.push_back({Cost,SalesAtCost});
while(scanf("%d %d",&TempPrice,&TempSales)){
if(TempPrice == -1 && TempSales == -1) break;
item temp = {TempPrice,TempSales};
v.push_back(temp);
}
scanf("%d",&DecreaseMount);
sort(v.begin(),v.end(),cmp);
PricePocess();
sort(v.begin(),v.end(),cmp);
int PriceTag = -1;
for(int i=0;i<v.size();++i){
//printf("%d %d\n",v[i].Price,v[i].Sales);
if(v[i].Price == GovPrice){
PriceTag = i;
TargetSales = v[i].Sales;
break;
}
}
if(PriceTag == -1){
printf("NO SOLUTION\n");
return 0;
}else{
int MoneyForOne = GovPrice - Cost;
double LimitMax = 100000000 ,LimitMin = -1000000000;
for(int i = 0;i<PriceTag;++i){
double TempLimit = 1.0 * (MoneyForOne * TargetSales - ((v[i].Price-Cost)*v[i].Sales) ) / (v[i].Sales - TargetSales);
LimitMax = min(TempLimit,LimitMax);
}
for(int i = PriceTag+1;i<v.size();++i){
double TempLimit = 1.0 * ((v[i].Price-Cost)*v[i].Sales - MoneyForOne * TargetSales ) / (TargetSales - v[i].Sales);
LimitMin = max(TempLimit,LimitMin);
}
int ans = 0;
//printf("%f %f\n",LimitMin,LimitMax);
if(LimitMin > LimitMax){
printf("NO SOLUTION\n");
return 0;
}else if(LimitMin > 0){
if(fabs((LimitMin) - (int)(LimitMin)) > 1e-6) ans = (int)LimitMin + 1;
else ans = (int)LimitMin;
}else if(LimitMax < 0){
if(fabs((LimitMax) - (int)(LimitMax)) > 1e-6) ans = (int)LimitMax - 1;
else ans = (int)LimitMax;
}
printf("%d\n",ans);
}
return 0;
}
洛谷 P1023 税收与补贴问题 (2000NOIP提高组)的更多相关文章
- 洛谷——P1023 税收与补贴问题
P1023 税收与补贴问题 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最 ...
- 洛谷P1023 税收与补贴问题
P1023 税收与补贴问题 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最 ...
- 洛谷 P1023 税收与补贴问题
P1023 税收与补贴问题 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最 ...
- [NOIP2000] 提高组 洛谷P1023 税收与补贴问题
题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递 ...
- 洛谷p1017 进制转换(2000noip提高组)
洛谷P1017 进制转换 题意分析 给出一个数n,要求用负R进制显示. n∈[-32768,32767].R ∈[-20,-2] 考察的是负进制数的转换,需要理解短除法. 看到这道题的时候,我是比较蒙 ...
- Java实现 洛谷 P1023 税收与补贴问题
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = n ...
- 洛谷-求同构数的个数-NOIP2013提高组复赛
题目描述 Description 所谓同构数是指这样的数,即它出现在它的平方数的右端.例如,5的平方是25 (即5×5=25),5是25右端的数,那么5就是同构数.又如,25的平方是625(即25×2 ...
- 洛谷-谁拿了最多奖学金-NOIP2005提高组复赛
题目描述 Description 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>8 ...
- 洛谷 1328 生活大爆炸版石头剪刀布(NOIp2014提高组)
[题解] 简单粗暴的模拟题. #include<cstdio> #include<algorithm> #include<cstring> #define LL l ...
随机推荐
- DataGridView滚动慢的解决方法
当DataGridView达到一定大小的时候,拖动滚动条就会非常慢,出现让人难以忍受的闪动. 即便只有100行,每行30列. 解决方法是启用DataGridView的双缓冲. 1 2 3 4 5 6 ...
- 为CentOS系统配置防火墙设置
在各种操作系统中,为了保护系统在网络中是相对安全的,我们通常都会给操作系统配置防火墙,通过配置防火墙来限定哪些流量可以进来,哪些流量可以出去,通过这样的一种方式,可以有效的管理系统的流量,从一定程度上 ...
- 2018百度之星开发者大赛-paddlepaddle学习(二)将数据保存为recordio文件并读取
paddlepaddle将数据保存为recordio文件并读取 因为有时候一次性将数据加载到内存中有可能太大,所以我们可以选择将数据转换成标准格式recordio文件并读取供我们的网络利用,接下来记录 ...
- Druid Monitor小记
继上篇DruidDataSource源码分析之后 , 公司又要求做一个Druid的数据库监控 , 以及spring监控 , 研究一小时 , 总结出了一点经验 , 特此贴出来分享一下 一 . 利用Dru ...
- CSS3 使用 calc() 计算高度 vh px
Viewport viewport:可视窗口,也就是浏览器. vw Viewport宽度, 1vw 等于viewport宽度的1% vh Viewport高度, 1vh 等于view ...
- 进击的SDN
SDN是什么? 不再是OSI七层模型,全新的SDN三层模型. 起源于斯坦福大学博士生领导的一个项目Ethane:通过一个集中式控制器(NOX),网络管理员可以定义基于网络流的控制策略,并将这个策略用于 ...
- 未能加载文件或程序集“log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821”或它的某一个依赖项。系统找不到指定的文件。
在网上找了很久,很多个地方让修改配置文件,也有重装log4net的. 如文章:使用Common.Logging与log4net的组件版本兼容问题 我检查下发现项目中的package包中的Log4net ...
- 技嘉主板+AMD CPU开启CPU虚拟化方法
硬件环境:技嘉AB350+AMD Ryzen 5 1600X 由于安装虚拟机的需要,所以要开启CPU的虚拟化. 首先进入BIOS. 然后如图:(M.I.T-高级频率设定-CPU超频进阶设置-SVM M ...
- CCF——数列分段201509-1
问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, …, an,表示 ...
- 测试——约跑APP
项目名:约跑APP 用户需求规格说明书URL:http://www.cnblogs.com/liquan/p/6071804.html 组长博客URL:http://www.cnblogs.com/l ...