P1781 宇宙总统
P1781题库链接:https://www.luogu.org/problem/P1781
难度:普及-
算法标签:排序,高精,字符串
1.高精+排序 O(nlog(n)) 得分100
因为选票数可能会过长,所以用string型存储,使用结构体记录竞选者的编号(id)与选票(p),若想使用sort就要重写比较函数,先比较字符串的长度,若长度一样就比较字符串的内容,否则就比较长度,利用STL中的sort快排,排序后所求的选票数最高的人即为第一个人
1 #include <cstdio> 2 #include <iostream> 3 #include <string> 4 #include <algorithm> 5 using namespace std; 6 struct node 7 { 8 int id; 9 string p; 10 } s[31]; 11 bool cmp1(node a, node b) 12 { 13 if(a.p.size() == b.p.size()) return a.p > b.p; 14 return a.p.size() > b.p.size(); 15 } 16 int main() 17 { 18 int n; 19 scanf("%d", &n); 20 for(int i = 1; i <= n; ++i) 21 { 22 s[i].id = i; 23 cin >> s[i].p; 24 } 25 sort(s + 1, s + n + 1, cmp1); 26 printf("%d\n%s\n", s[1].id, s[1].p.c_str()); 27 }