首页 > 其他分享 >[2000年NOIP普及组] 税收与补贴问题

[2000年NOIP普及组] 税收与补贴问题

时间:2022-08-14 20:15:22浏览次数:53  
标签:普及 NOIP int max price zero 2000 num 补贴

[2000年NOIP普及组] 税收与补贴问题

  • 分析:根据题意,在销量随售价改变的基础上求最小的补贴或税收,本题用了打表的方式来展现售价与销量之间的关系,其中出现了几个与普遍的规律不相同的组合,对于特例我们就要进行单独考虑,在打完表后,根据利润=(售价-进价+补贴)*销量 或者 利润=(售价-进价-税收)*销量 并开一个max来求其中的利润最大值以此获得此时的j(补贴或税收)值,如果此时的价格刚好是政府所期望的就说明找到了。
  • #include<iostream>
    using namespace std;
    int main()
    {
    int a[100001][3];//前面是指第几个 后面1指价格 2指数量
    int i=1,expect,cha,temp,down,zero,max,num,price,p;
    cin>>expect;
    while(cin>>a[i][1]>>a[i][2]&&a[i][1]!=-1&&a[i][2]!=-1)
    {
    i++;
    if(i>2&&a[i-1][1]-a[i-2][1]>1)//两个数量之间差值大于一(特例)
    {
    i--;//i退回前一位去处理特例
    cha=(a[i-1][2]-a[i][2])/(a[i][1]-a[i-1][1]);//特例每平均数的差值
    temp=a[i][1];//记录差值
    for(int j=a[i-1][1]+1;j<=temp;j++)
    {
    a[i][1]=j;//每一个数是当前的价格数
    a[i][2]=a[i-1][2]-cha;//i的数量是前一个的数量减去差值
    i++;
    }
    }
    }
    i--;//到-1-1停的,所以来个i--抵消一下
    cin>>down;
    zero=a[i][2];//赋值给zero推各价位数量
    while(zero>0)
    {
    if(zero-down<0) break;//数量成负的了
    else
    {
    zero-=down;//每次降价都减少的数量
    i++;//否则i就继续加
    a[i][1]=a[i-1][1]+1;//此时价格等于前一位+1
    a[i][2]=zero;//将此时数量赋值
    }
    }
    for(int j=1;j<=10000;j++)//补助
    {
    max=-99999;
    for(int k=1;k<=i;k++)//相当于i
    {
    num=(a[k][1]-a[1][1]+j)*a[k][2];//利润=(售价-进价+补贴)*数量
    if(num>=max)//求最大值
    {
    max=num;
    price=a[k][1];//现在的价格
    p=1;//此时j为正
    }
    }
    if(price==expect)
    {
    cout<<j*p<<endl;//若此时价格等于期望值符合题意
    return 0;//找到就退出
    }
    max=-99999;
    for(int k=1;k<=i;k++)//相当于i
    {
    num=(a[k][1]-a[1][1]-j)*a[k][2];//利润=(售价-进价-税收)*数量
    if(num>=max)//求最大值
    {
    max=num;
    price=a[k][1];//现在的价格
    p=-1;//此时j为负
    }
    }
    if(price==expect)
    {
    cout<<j*p<<endl;//若此时价格等于期望值符合题意
    return 0;//找到就退出
    }
    }
    cout<<"NO SOLUTION"<<endl;
    return 0;
    }

标签:普及,NOIP,int,max,price,zero,2000,num,补贴
From: https://www.cnblogs.com/xdzxjinghan/p/16586173.html

相关文章

  • [NOIP2001 提高组] 一元三次方程求解
    首先输入系数根据提示:三个实根之差绝对值均>=1......求解最后输出三个实根代码:#include<iostream>#include<cstdio>#include<math.h>usingnamespacestd;intmain(){......
  • [2001年NOIP普及组] 最大公约数和最小公倍数问题
     [2001年NOIP普及组]最大公约数和最小公倍数问题思路:可以运用暴力枚举法。先用两个数的乘积=他们的最大公约数*最小公倍数的公式求出乘积num,再在已知范围内暴力搜素能......
  • [2011年NOIP提高组] 铺地毯
    [2011年NOIP提高组]铺地毯思路:运用暴力枚举法。开一个结构体存地毯信息,然后铺上地毯。然后在根据要找的地点,与输入顺序反着一一枚举来找符合的地毯(因为地毯会覆盖,先铺的......
  • [2016年NOIP普及组] 回文日期
    [2016年NOIP普及组]回文日期分析:根据题意,有一个由年月日组成的八位数,判断是否是回文日期,因为每个月的天数是不一样的,所以可以开一个数组来存每个月的天数,此时有一个特殊......
  • P1008 [NOIP1998 普及组] 三连击
    P1008[NOIP1998普及组]三连击分析:根据题意,有1-9这9个数要分成三组组成三个三位数,意味着这9个数只能出现一次,且三个三位数的比例为1:2:3,由此可以得知这三个数中最小的那......
  • [2011年NOIP提高组] 铺地毯
    为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大......
  • [2016年NOIP普及组] 回文日期
    [2016年NOIP普及组]回文日期题目大意:用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月 份,最后 2 位代表日期,一个日期是回文的,当且仅当表示这个日......
  • [NOIP1998 普及组] 三连击
    [NOIP1998普及组]三连击思路:本题可以运用暴力枚举法,因为题目中有9个数字,所组成的3个三位数a,b,c的各个位数上的数的乘积与这已知的9个数的乘积相等,并且b=2*a,c=3*a。从能......
  • NC16496 [NOIP2014]飞扬的小鸟
    题目链接题目题目描述为了简化问题,我们对游戏规则进行了简化和改编:\1.游戏界面是一个长为n,高为m的二维平面,其中有k个管道(忽略管道的宽度)。\2.小鸟始终在游戏界......
  • [NOIP2001 提高组] 一元三次方程求解
    试题描述:输入一行,4个实数a,b,c,d输出一行,3个实根,从小到大输出,并精确到小数点后2位。样例输入1-5-420样例输出-2.002.005.00#include<bits/stdc+......