参考博客:税收与补贴问题(洛谷1023)
题解:
我真的没有看懂题目,所以一直卡在这里,我真的哭了,就不能好好地写个题意出来,让大家好懂一点,我要看别人的博客才知道怎么一回事。。。。
首先这个题目的背景就是:政府调控某商品的价格进行操作。
如果政府想某商品控制在一个目标价格(Tar),它只能有 收税和补贴两种形式来调控。
简单举个例子:
譬如,生活用盐,大家在商店都是很便宜的,但其实过程中,是有国家在背后调控的,担心有不良商家涨价来导致百姓生活受到影响。
比如说,生产盐 比如 成本高,但是为了大众的生活需求不能提升价格,这是政府出面 让商家或者生产商 补贴,或者不收税来进行调节,为的就是把定价降下来。
又比如说:大家买手机,国家更加向大家刺激国内需求,想大家支持国产的手机,所以对国外进口的手机进行收税,迫使商家把价格提高,让作为消费者的我们在同一价位上选择使更倾向国内手机,刺激国内生产业。
像这样的例子很多很多。
但是这个和题目有点关联。题目有一个地方说得太含糊了。
就是价格会影响消费者购买力。
即 价格 和 数量 之间的关系,
如果题目给了 某几点 (价格,数量)。
那么两点之间必须均分,换句话说:
价格 28 - 30 有三份,每一份都有对应的数量,
∴价格29的数量 =(价格为28的数量+价格为30的数量)/2
如果没有给定的价格,就按照题目给定的间隔,递减即可。
我们费点精力处理一下 数量和价格,
然后怎么才能让政府达到控制的效果呢????
这样即可:就是目标价格是最大的,比所有定价在这个【补贴|收税】制度下最大值。
(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>=(32-28+x)*95
解不定式方程组即可:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
const double eps = 1e-6;
const int inf = 0x3f3f3f3f;
typedef struct Node {
int x,y; // X 指的是价格,Y指的是数量
}Node ;
Node a[N];
bool cmp(Node u,Node v){
return u.x<v.x;
}
int main()
{
int Tar,cnt=0,tot; // Tar 指的是政府想要调控到的目标价格,tot指的是所有情况的个数
int X,Y,D,Tar_cnt;
scanf("%d",&Tar);
while(scanf("%d%d",&X,&Y),(~X||~Y)){
if( X == Tar ) Tar_cnt = Y;//找到目标价格的数量
a[cnt].x=X;
a[cnt++].y=Y;
}
scanf("%d",&D);
sort(a,a+cnt,cmp); // 题目样例虽然给了顺序的,题目没有提及升序
tot=cnt;
for(int i=1;i<cnt;i++){
int num=(a[i-1].y-a[i].y)/(a[i].x-a[i-1].x);
if( a[i-1].x + 1 != a[i].x ) { //把间隔中的情况枚举一下
for(int j=a[i-1].x+1;j<a[i].x;j++){
a[tot].x=j;
a[tot++].y=a[i-1].y-(j-a[i-1].x)*num;
if( j == Tar ) Tar_cnt = a[i-1].y-(j-a[i-1].x)*num; //找到目标价格的数量
}
}
}
X=a[cnt-1].x; //价钱
Y=a[cnt-1].y; //数量
if( Tar >=X ) //把目标后的价格 后枚举一个
for(int i=X+1; Tar+1>=X&&Y-(i-X)*D>0 ;i++){
if(i==Tar) Tar_cnt = (Y-(i-X)*D);//找到目标价格的数量
a[tot].x=i;
a[tot++].y=(Y-(i-X)*D);
}
sort(a,a+tot,cmp);
int c = a[0].x; //成本价
double L = -inf;
double R = inf;
for(int i=0; i < tot ; i++){
if( a[i].x == Tar ) continue ;
//解决 Kx >= C 的形式
double C = (double)((double)(a[i].x-c)*a[i].y - (double)(Tar-c)*Tar_cnt);
double K = (double)( Tar_cnt-a[i].y );
if( Tar_cnt > a[i].y ){
L = max ( C/K, L);
}else{
R = min ( C/K, R);
}
}
if(L>R){
printf("NO SOLUTION\n");
}else if( L > 0) {
printf("%.0f\n",ceil(L));
}else if( R < 0 ){
printf("%.0f\n",floor(R));
}else{
printf("0\n");
}
return 0;
}
博客解析了洛谷1023题——税收与补贴问题,指出政府通过补贴或税收调控商品价格。文章抱怨题目描述模糊,并举例说明补贴和税收如何影响市场。关键在于理解价格与消费者购买力的关系,以及如何通过调整策略使目标价格最大化。最后,提出了求解不定式方程组的方法来找到解决方案。

363

被折叠的 条评论
为什么被折叠?



