結構體排序
阿新 • • 發佈:2020-10-04
P1068 分數線劃定
結構體排序 自定義排序
1 #include <cmath> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 6 struct node { 7 int id, score; 8 }p[5005]; 9 10 bool cmp(node x, node y) { 11 if (x.score == y.score) return x.id < y.id; 12 return x.score > y.score;View Code13 } 14 15 int main() { 16 int n, m, idx; 17 cin >> n >> m; 18 idx = floor(m * 1.5); //向下取整 19 for (int i = 1; i <= n; i++) cin >> p[i].id >> p[i].score; 20 sort(p + 1, p + 1 + n, cmp); 21 cout << p[idx].score << " "; 22 int i = idx; 23while(p[i].score == p[i + 1].score && i <= n) i++; 24 cout << i << endl; 25 for (int j = 1; j <= i; j++) cout << p[j].id << " " << p[j].score << endl; 26 return 0; 27 }
P1803 凌亂的yyy / 線段覆蓋
結構體排序 貪心
1 #include <cstdio> 2View Code#include <iostream> 3 #include <algorithm> 4 using namespace std; 5 6 struct node { 7 int a, b; 8 }match[1000005]; 9 10 bool cmp(node x, node y) { 11 return x.b < y.b; 12 } 13 14 int main() { 15 int n, ans = 0, time = -1; 16 scanf("%d", &n); 17 for (int i = 0; i < n; i++) scanf("%d%d", &match[i].a, &match[i].b); 18 sort(match, match + n, cmp); 19 for (int i = 0; i < n; i++) { 20 if (match[i].a < time) continue; 21 ans++; time = match[i].b; 22 } 23 printf("%d\n", ans); 24 return 0; 25 }
P1208 [USACO1.3]混合牛奶 Mixing Milk
結構體排序 貪心
1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 const int N = 2e6 + 10; 6 7 struct milk { 8 int p, a; 9 }; 10 11 milk farmer[N]; 12 13 bool cmp(milk x, milk y) { 14 return x.p < y.p; 15 } 16 17 int main() { 18 int n, m, ans = 0; 19 scanf("%d %d", &n, &m); 20 for (int i = 1; i <= m; i++) scanf("%d %d", &farmer[i].p, &farmer[i].a); 21 sort(farmer + 1, farmer + 1 + m, cmp); 22 for (int i = 1; i <= m; i++) { 23 if (farmer[i].a <= n) { 24 ans += farmer[i].p * farmer[i].a; 25 n -= farmer[i].a; 26 } else { 27 ans += farmer[i].p * n; 28 n = 0; 29 } 30 if (n <= 0) { 31 printf("%d\n", ans); 32 return 0; 33 } 34 } 35 printf("0\n"); 36 return 0; 37 }View Code