HDU 2093 水题,就是注意一下细节,有个结构体的排序,重载运算符小于
注意细节,就是名字是左对齐,其余两项是右对齐,然后名字和题目数中间有一个空格,题目数和时间之间有一个空格。
做了一两个小时,弱暴了`````
不过也有点收获,看到了以前学C时没有怎么注意到的,有个头文件叫ctype.h,里面有函数isalpha(c),isdigit(c)各种处理字符的函数,以前看到过,很久不用就忘了,还是得学了多用才行。。。不过自己写一下也没什么太大的关系````
还有就是左对齐得加个“ - ” ,也忘了````
贴代码:
View Code
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 #define MAXN 1000 6 int n,m; 7 int cur; 8 struct person 9 { 10 char name[11]; 11 int num; 12 int score; 13 bool operator <(const person & o)const 14 { 15 if(num > o.num) return true; 16 else if(num < o.num) return false; 17 else if(score < o.score) return true; 18 else if(score > o.score) return false; 19 else if(strcmp(name,o.name) < 0) return true; 20 else return false; 21 } 22 } p[MAXN]; 23 int main() 24 { 25 // freopen("in.cpp","r",stdin); 26 for(int i=0; i<MAXN; ++i) 27 p[i].num = 0; 28 cur = -1; 29 scanf("%d%d",&n,&m); 30 while(scanf("%s",p[++cur].name) != EOF) 31 { 32 for(int i=0; i<n; ++i) 33 { 34 int y,z; 35 scanf("%d",&y); 36 if(y > 0) 37 { 38 char c = getchar(); 39 if(c == '(') 40 { 41 scanf("%d)",&z); 42 y += z*m; 43 } 44 p[cur].score += y; 45 ++p[cur].num; 46 } 47 } 48 } 49 sort(p,p+cur); 50 for(int i=0; i<cur; ++i) 51 { 52 printf("%-10s %2d %4d\n",p[i].name,p[i].num,p[i].score); 53 } 54 return 0; 55 }