P1023 税收与补贴问题

Posted xiaoyezi-wink

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1023 税收与补贴问题相关的知识,希望对你有一定的参考价值。

P1023 税收与补贴问题

题解

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

     expect-1     expect     expect+1 

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

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

 

(题目不是说:

技术图片

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

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

如果是严格相对最大,呐就是题目的锅了

可能题目不要求严格最大QWQ

 

代码

#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\\n",i); return 0; 
        work(-i);
        if(flag) printf("%d\\n",-i); return 0; 
    
    printf("NO SOLUTION\\n");
    return 0;

 

以上是关于P1023 税收与补贴问题的主要内容,如果未能解决你的问题,请参考以下文章

Luogu P1023 税收与补贴问题

做题记录:P1023 税收与补贴问题

[NOIP2000] 提高组 洛谷P1023 税收与补贴问题

1023税收与补贴问题

NOip2000税收与补贴问题

NOip2000税收与补贴问题