社区讨论

求助RE

P1023[NOIP 2000 普及组] 税收与补贴问题参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi6mqt0y
此快照首次捕获于
2025/11/20 07:24
4 个月前
此快照最后确认于
2025/11/20 07:24
4 个月前
查看原帖
CPP
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    int est,c,sc,s[10010],pr[10010],p,w[10010],i=0,b,d,minn=99999;
    int slt=0;
    double k;
    memset(s,0,sizeof(s));
    cin>>est;
    cin>>c>>sc;
    pr[0]=c;s[c]=sc;
    do{
        i++;
        cin>>pr[i];cin>>s[pr[i]];
    }while(pr[i]!=-1 && s[pr[i]]!=-1);
    cin>>b;
    sort(pr,pr+i);
    for(int j=1;j<i;j++)
    {
        k=(s[pr[j]]-s[pr[j-1]])/(pr[j]-pr[j-1]);
        for(int h=pr[j-1]+1;h<pr[j];h++)
        s[h]=s[pr[j-1]]+k*(h-pr[j-1]);
    }
    p=c;
    for(;;)
    {
        p++;
        if(s[p]!=0) 
        {
            w[p]=(p-c)*s[p];
        }
        else
        {
            s[p]=s[p-1]-b;
            if(s[p]<=0) break;
            w[p]=(p-c)*s[p];
        }        
    }
    for(d=c-est;d<p-c;d++)
    {
        if(w[est]+d*s[est]>w[est-1]+d*s[est-1] && w[est]+d*s[est]>w[est+1]+d*s[est+1]) 
        {
            if(abs(d)<minn)
            {
                if(d>=0) slt=1;
                else slt=-1;
            }
            minn=min(minn,abs(d));
        }
    }
    if(slt==1) cout<<minn;
    if(slt==-1) cout<<"-"<<minn;
    if(slt==0)
    cout<<"NO SOLUTION";
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...