1. 程式人生 > 實用技巧 >結構體排序

結構體排序

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;
13 } 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; 23
while(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 }
View Code

P1803 凌亂的yyy / 線段覆蓋

結構體排序 貪心

 1 #include <cstdio>
 2
#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 }
View Code

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