# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
103346 | tincamatei | Art Exhibition (JOI18_art) | C++14 | 6 ms | 384 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 500000;
struct Paint {
long long a, b;
}v[1+MAX_N];
bool cmp(Paint a, Paint b) {
return a.a < b.a;
}
int main() {
#ifdef HOME
FILE *fin = fopen("input.in", "r");
FILE *fout = fopen("output.out", "w");
#else
FILE *fin = stdin;
FILE *fout = stdout;
#endif
int n;
long long best, rez, sp;
fscanf(fin, "%d", &n);
for(int i = 0; i < n; ++i)
fscanf(fin, "%lld%lld", &v[i].a, &v[i].b);
sort(v, v + n, cmp);
sp = rez = 0LL;
best = v[0].a;
for(int i = 1; i < (1 << n); ++i) {
long long minA, maxA, sum;
minA = 1LL<<60;
maxA = -1;
sum = 0LL;
for(int j = 0; j < n; ++j)
if((1 << j) & i) {
sum += v[j].b;
minA = min(minA, v[j].a);
maxA = max(maxA, v[j].a);
}
rez = max(rez, sum - (maxA - minA));
}
/*for(int i = 0; i < n; ++i) {
sp = 0LL;
for(int j = i; j < n; ++j) {
sp += v[j].b;
rez = max(rez, sp - v[j].a + v[i].a);
//if(sp - v[j].a + v[i].a == rez)
//printf("%d %d->%lld\n", i, j, sp - v[j].a + v[i].a);
}
}*/
/*for(int i = 0; i < n; ++i) {
printf("%lld %lld\n", v[i].a, v[i].b);
sp = sp + v[i].b;
rez = max(rez, sp - v[i].a + best);
best = max(best, -sp + v[i].b + v[i].a);
printf("!%lld\n", sp);
} */
fprintf(fout, "%lld", rez);
fclose(fin);
fclose(fout);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |