Submission #124966

# Submission time Handle Problem Language Result Execution time Memory
124966 2019-07-04T08:23:58 Z ansol4328 None (KOI17_cook) C++11
0 / 100
5 ms 3064 KB
#include<stdio.h>
#include<deque>
#include<utility>
#include<algorithm>

using namespace std;
typedef pair<int,int> P;

int n, m, s, e, t;
int xy[3005][3005], lst[3005];
int dp[3005][3005], sum[3005][3005];
deque<P> dq[3005];
P mval[3005][3];
const int INF=1e9;

void set_mval(int idx)
{
    mval[idx][0]=mval[idx][1]=mval[idx][2]=P(INF,INF);
    for(int i=1 ; i<=n ; i++)
    {
        if(mval[idx][0].first>dp[i][idx])
        {
            mval[idx][2]=mval[idx][1];
            mval[idx][1]=mval[idx][0];
            mval[idx][0]=P(dp[i][idx],i);
        }
        else if(mval[idx][1].first>dp[i][idx])
        {
            mval[idx][2]=mval[idx][1];
            mval[idx][1]=P(dp[i][idx],i);
        }
        else if(mval[idx][2].first>dp[i][idx])
        {
            mval[idx][2]=P(dp[i][idx],i);
        }
    }
}

int get_mval(int idx, int t)
{
    if(lst[t]!=mval[idx][0].second && t!=mval[idx][0].second) return mval[idx][0].first;
    if(lst[t]!=mval[idx][1].second && t!=mval[idx][1].second) return mval[idx][1].first;
    if(lst[t]!=mval[idx][2].second && t!=mval[idx][2].second) return mval[idx][2].first;
}

int main()
{
    scanf("%d %d %d %d %d",&n,&m,&s,&e,&t);
    for(int i=1 ; i<=n ; i++)
    {
        for(int j=1 ; j<=m ; j++)
        {
            scanf("%d",&xy[i][j]);
            sum[i][j]=xy[i][j]+sum[i][j-1];
            dp[i][j]=(j<=e ? sum[i][j] : INF);
        }
    }
    for(int i=1 ; i<=n ; i++) scanf("%d",&lst[i]);
    for(int i=1 ; i<=s ; i++) set_mval(i);
    for(int j=s+1 ; j<=m ; j++)
    {
        for(int i=1 ; i<=n ; i++)
        {
            P val=P(get_mval(j-s,i)-sum[i][j-s],j-s);
            while(!dq[i].empty() && dq[i].back().first>val.first) dq[i].pop_back();
            dq[i].push_back(val);
            while(!dq[i].empty() && dq[i].front().second<j-e) dq[i].pop_front();
        }
        for(int i=1 ; i<=n ; i++) dp[i][j]=min(dp[i][j],dq[i][0].first+sum[i][j]+t);
        set_mval(j);
    }
    for(int j=m-s+1 ; j<m ; j++)
    {
        for(int i=1 ; i<=n ; i++)
        {
            P val=P(get_mval(j,i)-sum[i][j],j);
            while(!dq[i].empty() && dq[i].back().first>val.first) dq[i].pop_back();
            dq[i].push_back(val);
            while(!dq[i].empty() && dq[i].front().second<m-e) dq[i].pop_front();
        }
        for(int i=1 ; i<=n ; i++) dp[i][m]=min(dp[i][j],dq[i][0].first+sum[i][m]+t);
    }
    int res=INF;
    for(int i=1 ; i<=n ; i++) res=min(res,dp[i][m]);
    printf("%d",res);
    return 0;
}

Compilation message

cook.cpp: In function 'int get_mval(int, int)':
cook.cpp:44:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
cook.cpp: In function 'int main()':
cook.cpp:48:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %d %d %d",&n,&m,&s,&e,&t);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cook.cpp:53:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&xy[i][j]);
             ~~~~~^~~~~~~~~~~~~~~~
cook.cpp:58:36: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(int i=1 ; i<=n ; i++) scanf("%d",&lst[i]);
                               ~~~~~^~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 3028 KB Output is correct
2 Incorrect 5 ms 3064 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 3028 KB Output is correct
2 Incorrect 5 ms 3064 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 3028 KB Output is correct
2 Incorrect 5 ms 3064 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 3028 KB Output is correct
2 Incorrect 5 ms 3064 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 3028 KB Output is correct
2 Incorrect 5 ms 3064 KB Output isn't correct
3 Halted 0 ms 0 KB -