Submission #197126

#TimeUsernameProblemLanguageResultExecution timeMemory
197126dennisstar요리 강좌 (KOI17_cook)C++11
100 / 100
639 ms54280 KiB
#include <bits/stdc++.h> #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #define fi first #define se second #define ryan bear #define sq(X) ((X)*(X)) #define eb emplace_back #define all(V) (V).begin(), (V).end() #define unq(V) (V).erase(unique(all(V)), (V).end()) using namespace std; typedef long long ll; typedef vector<ll> vlm; typedef vector<int> vim; typedef pair<ll, ll> pll; typedef pair<int, int> pii; int N, M, S, E, T; vim ar[3010]; int ban[3010]; deque<pii> dq[3010]; int Dp[3010][3010]; int get(int i, int s, int e) { return s?(ar[i][e]-ar[i][s-1]):ar[i][e]; } int main() { scanf("%d %d %d %d %d", &N, &M, &S, &E, &T); for (int i=1; i<=N; i++) { ar[i].resize(M+1); for (int j=1; j<=M; j++) { scanf("%d", &ar[i][j]); ar[i][j]+=ar[i][j-1]; } } for (int i=1; i<=N; i++) scanf("%d", &ban[i]); for (int i=2; i<=S; i++) for (int j=1; j<=N; j++) Dp[j][i]=(3<<29); for (int i=S+1; i<=M; i++) { pii m1, m2, m3, im; m1=m2=m3=pii((3<<29), (3<<29)); for (int j=1; j<=N; j++) { while (!dq[j].empty()&&dq[j].front().fi<i-E) dq[j].pop_front(); while (!dq[j].empty()&&dq[j].back().se+get(j, dq[j].back().fi, i-1)>=Dp[j][i-S]+get(j, i-S, i-1)) dq[j].pop_back(); dq[j].eb(i-S, Dp[j][i-S]); im=pii(dq[j].front().se+get(j, dq[j].front().fi, i-1), j); if (im.fi<=m1.fi) { m3=m2; m2=m1; m1=im; } else if (im.fi<=m2.fi) { m3=m2; m2=im; } else if (im.fi<=m3.fi) m3=im; } for (int j=1; j<=N; j++) { if (m1.se==j||m1.se==ban[j]) { if (m2.se==j||m2.se==ban[j]) Dp[j][i]=m3.fi+T; else Dp[j][i]=m2.fi+T; } else Dp[j][i]=m1.fi+T; } } int ans=(3<<29); for (int i=M-E+1; i<=M; i++) for (int j=1; j<=N; j++) ans=min(ans, Dp[j][i]+get(j, i, M)); printf("%d\n", ans); return 0; }

Compilation message (stderr)

cook.cpp: In function 'int main()':
cook.cpp:24:7: 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:27:35: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   for (int j=1; j<=M; j++) { scanf("%d", &ar[i][j]); ar[i][j]+=ar[i][j-1]; }
                              ~~~~~^~~~~~~~~~~~~~~~~
cook.cpp:29:32: 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", &ban[i]);
                           ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...