P1023 税收与补贴问题(洛谷)

本文介绍了解不等式求解税收与补贴问题的方法,通过定义解集为实数范围,逐步计算不同价格下的销量,并最终确定补贴或税收的合理区间。使用C++实现,涉及销量预测、成本分析及数学运算。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

P1023 税收与补贴问题

这一题我选了一篇好的题解 做法是解不等式 (遇到的第一道解不等式的题,原来一开始要定义解集为无穷)
解析请看注释

#include<bits/stdc++.h>//第一次碰到解不等式的题  
using namespace std;
const int maxn = 10005;//数据最大值不超过一万 

int expect,cost,c,it,scale,sale[maxn];// 政府期望价 成本价(增加) 成本价(不变)工作指针(初始值为0 指向价格) 临时销量 sale数组是不同价格对应的销量 
double MIN = -1e9,MAX = 1e9;//程序解不等式先默认解集为一切实数 这里是(-1e9 - 1e9) 

int main(){
	
	cin>>expect>>cost>>scale;
	c = cost;
	
	while(cost != -1 && scale != -1){//这里第一次循环虽然算出了从0到成本的单价对应的销量 但是这些数据是无用的 因为单价 要确保大于成本 
		sale[cost] = scale;
		for(int i = it + 1;i < cost;i++)
			sale[i] = sale[i - 1] + (scale - sale[it]) / (cost - it);
		it = cost;
		cin>>cost>>scale;
	}
	cin>>cost;//最后输入的cost性质从商品单价变成了在已知的最高单价外每升高一块钱将减少的销量
	
	while(sale[it] > cost){//工作指针指向的价格对应的销量在减去cost后仍然大于0 即 sale[it + 1]的销量大于0 
		it++;
		sale[it] = sale[it - 1] - cost; 
	}//到这一步就算出了每一个价格所对应的销量 (确保销量大于等于成本c 不然无意义) 而且这里的it指向了最高单价 
	
	for(int i = c;i <= it;i++){
		double ans = (sale[expect] * (expect - c) - sale[i] * (i - c)) * 1.0 / (sale[i] - sale[expect]);//浮点数除法一定要乘上1.0啊!!!!! 
//这里的ans就是所求补贴或者税收 
//等式来自于 不等式 : (ans + i - c) * sale[i] <= (ans + expect - c) * sale[expect]; 
		double flag = sale[i] - sale[expect];//判断分母的正负 确认不等式符号
		if(flag > 0)MAX = min(MAX,ans);//解集上限判断 
		else MIN = max(MIN,ans);//解集下限判断 
	} 
	
	if(MIN > 0)printf("%d",(int)ceil(MIN));//向上取整(ceil)
	else if(MAX < 0)printf("%d",(int)floor(MAX));//向下取整(floor)
	else cout<<'0';//MIN < 0 < MAX
	return 0; 
}

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值