HDU 6012 Lotus and Horticulture
阿新 • • 發佈:2017-08-05
num cout ostream n) %d 如果 -- 等於 inpu
Lotus and Horticulture
題意:花有一個最適的溫度範圍 l 和 r ,如果等於這個範圍其價值為a, 高於為b,等於為c,求最大的價值
思路:如果一一枚舉肯定超時,所有把每個區間的端點都存在一個結構體裏,-1為左, 1為右,再從小到大排序,假設起點從負無窮小開始(sum = 所有的c),一一遍歷每個端點,求出最大值。
#include <iostream> #include <queue> #include <cstdio> #include <algorithm> using namespace std; struct A {int dian; int f; int num; }p[50000*2]; int a[50005], b[50005], c[50005]; long long sum = 0; int n; int Min; int j; bool cmp(A a, A b) { if(a.dian != b.dian) return a.dian < b.dian; else return a.f < b.f; } void Input() { sum = 0; cin >> n; int l, r; j = 0; for(int i = 0; i < n; i++) { scanf("%d%d%d%d%d", &l, &r, &a[i], &b[i], &c[i]); p[j].dian = l; p[j].f = -1; p[j].num = i; j++; p[j].dian = r; p[j].num = i; p[j].f = 1; j++; sum += c[i]; } sort(p, p+j, cmp); } void finds() { long long Sum = 0; Sum = max(Sum, sum); for(int i = 0; i < j; i++) { int l = i; while(p[i].dian == p[i+1].dian && p[i].f == p[i+1].f)i++; for(int k = l; k <= i; k++) { if(p[k].f == -1)sum += a[p[k].num] - c[p[k].num]; else sum += b[p[k].num] - a[p[k].num]; } Sum = max(Sum, sum); } cout << Sum << endl; } int main() { int t; cin >> t; while(t--) { Input(); finds(); } return 0; }
HDU 6012 Lotus and Horticulture