• BZOJ 2600: [Ioi2011]ricehub 双指针+贪心


    不难发现,当我们要选的区间确定后,一定会把仓库安排到中间的稻草上(如果是偶数个的话中间两个都行)。   

    然后按照坐标从小到大枚举右指针,左指针一定不递减,双指针扫一下就行了. 

    code: 

    #include <bits/stdc++.h>    
    #define N 100007 
    #define ll long long 
    #define setIO(s) freopen(s".in","r",stdin)  
    using namespace std;     
    int n,num[N]; 
    ll limit,C,x[N],dis[N];  
    ll calc(int L,int R) 
    {
        int mid=(L+R)>>1;   
        ll cl=x[mid]*(mid-L+1)-(dis[mid]-dis[L-1]),cr=0;    
        if(R>mid) 
        {    
            cr=dis[R]-dis[mid]-x[mid]*(R-mid);   
        }
        return cl+cr;   
    }    
    int main() 
    {  
        // setIO("input");  
        int i,j,l,r,ans=0;     
        scanf("%d%lld%lld",&n,&limit,&C);   
        for(i=1;i<=n;++i)   scanf("%lld",&x[i]); 
        sort(x+1,x+1+n);         
        for(i=1;i<=n;++i)    
        {
            num[i]=i;  
            dis[i]=dis[i-1]+x[i];    
        } 
        for(l=r=1;r<=n;++r)  
        {   
            while(l<=r&&calc(l,r)>C) ++l;         
            ans=max(ans,r-l+1);  
        }  
        printf("%d
    ",ans); 
        return 0;      
    }
    

      

  • 相关阅读:
    闰年测试
    EditBox的测试用例设计
    测试工程中的评审
    测试框架
    github
    第一次上机实验
    对软件测试的初步认识
    白盒测试
    Date : 日期对象
    C++ 格式化输出 及 输入 流
  • 原文地址:https://www.cnblogs.com/guangheli/p/12055500.html
Copyright © 2020-2023  润新知