제출 #345114

#제출 시각아이디문제언어결과실행 시간메모리
345114daniel920712Rice Hub (IOI11_ricehub)C++14
0 / 100
4 ms1276 KiB
#include "ricehub.h"
#include <algorithm>
#include <vector>
using namespace std;
vector < long long > all;
vector < long long > a,b;
int besthub(int R, int L, int X[], long long B)
{
    long long now=0,i,j,ans=0,t=0,x,y=0;
    for(i=0;i<R;i++)
    {
        a.push_back(X[i]-X[0]);
        if(i) a[i]+=a[i-1];
    }
    for(i=0;i<R;i++)
    {
        b.push_back(X[R-1]-X[i]);
        if(i) b[i]+=b[i-1];
    }
    ans=max(upper_bound(a.begin(),a.end(),B)-a.begin(),upper_bound(b.begin(),b.end(),B)-b.begin());
    a.clear();
    b.clear();
    for(i=0;i<R;i++) a.push_back(X[i]);
    for(i=0;i<R;i++)
    {
        if(now+(X[i]-X[0])>B)
        {
            t=i;
            x=i;
            break;
        }
        now+=X[i]-X[0];
    }
    y=0;
    ans=max(ans,t);
    for(i=1;i<R;i++)
    {
        now+=(X[i]-X[i-1])*y;
        y--;
        x++;
        now-=(X[i]-X[i-1])*x;

        while(now>B)
        {
            if(y==0)
            {
                now-=X[i+x-1]-X[i];
                x--;
                t--;
            }
            else if(X[i+x-1]-X[i]<=X[i]-X[i-y])
            {
                now-=X[i]-X[i-y];
                y--;
                t--;
            }
            else
            {
                now-=X[i+x-1]-X[i];
                x--;
                t--;
            }
        }

        while(now<=B)
        {
            if(i+x>=R&&i-y-1>=0)
            {
                if(now+X[i]-X[i-y-1]<=B)
                {
                    y++;
                    t++;
                    now+=X[i]-X[i-y-1];
                }
                else break;
            }

            else if(i+x<R&&i-y-1<0)
            {
                if(now+X[i+x]-X[i]<=B)
                {
                    x++;
                    t++;
                    now+=X[i+x]-X[i];
                }
                else break;
            }
            else if(i+x<R&&i-y-1>=0)
            {
                if(X[i+x]-X[i]<=X[i]-X[i-y-1])
                {
                    if(now+X[i+x]-X[i]<=B)
                    {
                        x++;
                        t++;
                        now+=X[i+x]-X[i];
                    }
                    else break;
                }
                else
                {
                    if(now+X[i]-X[i-y-1]<=B)
                    {
                        y++;
                        t++;
                        now+=X[i]-X[i-y-1];
                    }
                    else break;
                }
            }
        }
        ans=max(ans,t);
    }
    return (int) ans;
}

컴파일 시 표준 에러 (stderr) 메시지

ricehub.cpp: In function 'int besthub(int, int, int*, long long int)':
ricehub.cpp:9:23: warning: unused variable 'j' [-Wunused-variable]
    9 |     long long now=0,i,j,ans=0,t=0,x,y=0;
      |                       ^
ricehub.cpp:40:10: warning: 'x' may be used uninitialized in this function [-Wmaybe-uninitialized]
   40 |         x++;
      |         ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...