zoukankan      html  css  js  c++  java
  • P1023 税收与补贴问题

    P1023 税收与补贴问题

    题解

    对于这道题目其实只关乎3个价位的利润:

         expect-1     expect     expect+1 

    一旦利润: expect-1  ≤ expect  ≥  expect+1 

    那么在这种情况下的税收和补贴就可以实现要求

    解释一下为啥>=和,<=

    题目说:

    这样一开始按这样算的:利润: expect-1  <  expect  >  expect+1 

    但是最后一个测试点并不允许我这样QWQ,是我理解问题QWQ

    解释一下,比如3个数  a=5  ,  b=5  ,  c=1

    最大值是5

    a既然等于5,那么a就是相对最大值啊

    再者,题面说的是“在这个价格上能取到最大总利润”

    最大值本来就可以大于等于

    代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<string>
    #include<cstring>
    #include<cstdlib>
    #include<queue>
    
    using namespace std;
    
    inline int read()
    {
        int ans=0;
        char last=' ',ch=getchar();
        while(ch<'0'||ch>'9') last=ch,ch=getchar();
        while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar();
        if(last=='-') ans=-ans;
        return ans;
    }
    
    int expt,cb,maxval,maxcnt,jia,prinum=0;
    int lv,ln,ev,en,rv,rn;
    bool flag=0;
    struct node
    {
        int val,cnt;
    }pri[100010];
    
    void work(int x)
    {
        int k1=ln*(lv-cb+x);
        int k2=en*(ev-cb+x);
        int k3=rn*(rv-cb+x);
        if(k1<=k2&&k2>=k3) flag=1;
    }
    
    int main()
    {
        expt=read();
        pri[++prinum].val =read();
        pri[prinum].cnt =read();
        maxval=cb=pri[prinum].val ;
        maxcnt=pri[prinum].cnt;
        int x,y;
        while(scanf("%d%d",&x,&y))
        {
            if(x==-1&&y==-1) break;
            pri[++prinum].val =x;
            pri[prinum].cnt =y;
            if(x>maxval)
            {
                maxval=x;
                maxcnt=y;
            }
            if(x==expt) ev=x,en=y;
            if(x==expt-1) lv=x,ln=y;
            if(x==expt+1) rv=x,rn=y;
        }
        jia=read();
        if(!lv) lv=expt-1,ln=maxcnt-jia*(lv-maxval);
        if(!ev) ev=expt,en=maxcnt-jia*(ev-maxval);
        if(!rv) rv=expt+1,rn=maxcnt-jia*(rv-maxval);
        for(int i=1;i<=expt;i++)
        {
            work(i);
            if(flag){ printf("%d
    ",i); return 0; }
            work(-i);
            if(flag){ printf("%d
    ",-i); return 0; }
        }
        printf("NO SOLUTION
    ");
        return 0;
    }
  • 相关阅读:
    golang 常见疑惑总结
    golang 详解defer
    golang调试工具Delve
    ACE的源码划分
    通过#define连接字符串的特殊方法[转]
    转:extern "C"的用法解析
    转:3d max 2013 安装教程,凭着一种互联网精神提供给广大朋友
    转:Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide)
    转:折腾一晚上Bullet及Ogre相关工具的成果 -- 3Ds Max,Maya, blender, GameKit
    转:CMake快速入门教程-实战
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11241116.html
Copyright © 2011-2022 走看看