제출 #46335

#제출 시각아이디문제언어결과실행 시간메모리
46335RayaBurong25_1수열 (APIO14_sequence)C11
71 / 100
2071 ms86268 KiB
#include <stdio.h> #define INF 1e18 long long Sum[100005]; long long SumSq[100005]; long long DP[100005][2]; int Last[100005][205]; typedef struct line line; struct line { long long c; double s; int i; }; line Lines[100005]; int L; int cnt = 0; int I, J; double intersect(long long m, long long c, long long m2, long long c2) { // cnt++; if (m == m2) { if (c2 >= c) return -INF; else return INF; } else return (double) (c2 - c)/(m - m2); } int V[205]; int main() { int N, K; scanf("%d %d", &N, &K); int n, k, i; for (i = 0; i < N; i++) { scanf("%lld", &Sum[i]); if (i > 0) Sum[i] += Sum[i - 1]; SumSq[i] = Sum[i]*Sum[i]; } long long r, c; double s; for (k = 1; k <= K; k++) { L = 1; J = 0; Lines[0].c = 0; Lines[0].s = -INF; Lines[0].i = -1; // Lines[0] = {0, -INF, -1}; for (n = 0; n < N; n++) { while (J + 1 < L && Lines[J + 1].s <= Sum[n]) { J++; // cnt++; } DP[n][k%2] = Sum[Lines[J].i]*Sum[n] + Lines[J].c; Last[n][k] = Lines[J].i; c = DP[n][(k - 1)%2] - SumSq[n]; while (L > 0 && (s = intersect(Sum[Lines[L - 1].i], Lines[L - 1].c, Sum[n], c)) <= Lines[L - 1].s) { L--; // cnt++; } if (s != INF) { Lines[L].c = c; Lines[L].s = s; Lines[L].i = n; // Lines[L] = {c, s, n}; L++; } } // printf("k%d\n", k); } printf("%lld\n", DP[N - 1][K%2]); i = Last[N - 1][K]; k = K - 1; while (k >= 0 && i != -1) { V[k] = i + 1; i = Last[i][k]; k--; } for (i = 0; i < K; i++) printf("%d ", V[i]); // std::cout << "cnt" << cnt; }

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

sequence.c: In function 'main':
sequence.c:44:15: warning: unused variable 'r' [-Wunused-variable]
     long long r, c;
               ^
sequence.c:35:5: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &N, &K);
     ^~~~~~~~~~~~~~~~~~~~~~
sequence.c:39:9: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld", &Sum[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...
#Verdict Execution timeMemoryGrader output
Fetching results...