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 税收与补贴问题的主要内容,如果未能解决你的问题,请参考以下文章