洛谷 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 ...
随机推荐
- 1.5 JAVA的高并发编程
一.多线程的基本知识 1.1进程与线程的介绍(上个博客1.4中已经详细介绍进程和线程) 程序运行时在内存中分配自己独立的运行空间,就是进程 线程:它是位于进程中,负责当前进程中的某个具备独立运行资格的 ...
- 【java请求】- jmeter_jdbc脚本实战
一,导入 使用Jmeter运行Java脚本,需要用到Jmeter的提供的框架jar包(分别在jmeter目录下的lib和ext目录下)1.ApacheJMeter_core.jar2.ApacheJM ...
- linux下搭建python机器学习环境
前言 在 linux 下搭建 python 机器学习环境还是比较容易的,考虑到包依赖的问题,最好建立一个虚拟环境作为机器学习工作环境,在建立的虚拟环境中,再安装各种需要的包,主要有以下6个(这是看这个 ...
- SAP(ABAP) ABAP内部外部数据转换常用function
文本相关CONVERSION_EXIT_CUNIT_OUTPUT 将内部单位转为单位文本CONVERSION_EXIT_ISOLA_OUTPUT 根据语言代码取文本CONVERSI ...
- 梯度下降算法以及其Python实现
一.梯度下降算法理论知识 我们给出一组房子面积,卧室数目以及对应房价数据,如何从数据中找到房价y与面积x1和卧室数目x2的关系? 为了实现监督学习,我们选择采用自变量x1.x2的线性函数来评估因变 ...
- 大前端-全栈-node+easyui+express+vue+es6+webpack+react
作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正 视频来源:https://www.bil ...
- 关于css文字的扩展
1.不换行: .title{ white-space:nowrap; text-overflow:ellipsis; } 2.超出变三点 .title{ white-space:nowrap; tex ...
- 树状数组怒刷sum!!!(前缀和应用)
我们知道我们利用树状数组维护的是存到其中的a[ ]数组,但是我们做题需要的是sum[ ]数组,这才是我们真正需要的有用的信息,写这篇博客的目的便是整理一下sum数组是怎么样来应用解题的. 1. Sta ...
- 《Linux内核与分析》第四周
20135130王川东 一.用户态.内核态和中断处理过程 CPU的几种不同的执行级别: 高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种执行级别对应内核态: 低级别执行状态下,代码的掌握范 ...
- ranch代码简述
最近要看一下erlang连接池,觉得ranch很不错. github上面有人写了ranch的代码阅读,可以看一下,链接在这里. 1. ranch可以同时监听多个端口,每个端口的连接信息可以单独配置. ...