题目原文请移步下面的链接
贪心#include <bits/stdc++.h>
using namespace std;
void coder() {
long long n;
int m, k;
scanf("%lld%d%d", &n, &m, &k);
vector<pair<long long, long long> > v(k);
for (int i = 0; i < k; ++i) {
scanf("%lld%lld", &v[i].first, &v[i].second);
}
sort(v.begin(), v.end());
long long a = 0;
long long ans = 0;
for (int i = 0; i < k; ++i) {
if (v[i].first > a) {
a = v[i].first;
long long t = 1;
long long temp = 0;
for (int j = i + 1; v[j].second < n; ++j, ++i) {
temp += t * (v[j].second - v[j - 1].second);
++t;
}
temp += t * (n - v[i].second);
ans = max(ans, temp);
}
}
cout << ans;
}
int main() {
coder();
return 0;
}
只改了一行爆零代码,第21行代码
for (int j = i + 1; v[j].second < n; ++j, ++i) {
改成
for (int j = i + 1; v[j].second < n && v[j].first == a; ++j, ++i) {
AC代码
#include <bits/stdc++.h>
using namespace std;
void coder() {
long long n;
int m, k;
scanf("%lld%d%d", &n, &m, &k);
vector<pair<long long, long long> > v(k);
for (int i = 0; i < k; ++i) {
scanf("%lld%lld", &v[i].first, &v[i].second);
}
sort(v.begin(), v.end());
long long a = 0;
long long ans = 0;
for (int i = 0; i < k; ++i) {
if (v[i].first > a) {
a = v[i].first;
long long t = 1;
long long temp = 0;
for (int j = i + 1; v[j].second < n && v[j].first == a; ++j, ++i) {
temp += t * (v[j].second - v[j - 1].second);
++t;
}
temp += t * (n - v[i].second);
ans = max(ans, temp);
}
}
cout << ans;
}
int main() {
coder();
return 0;
}END