HDOJ 2093
程序员文章站
2024-03-15 16:27:54
...
Title
Point
- 输入部分:对于 111(5) 这类数据的输入可用scanf( “%d(%d)”,&x,&y );
- 操作部分:排序用定义在algorithm头文件里的sort函数,默认排列为升序。编写comp函数可实现按指定值升序、降序等。sort不仅对一般数组适用,vector、对象数组和结构体数组等也适用。
- 输出部分:利用iomanip头文件下的setw(int width) 控制列宽
Code
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <iomanip>
using namespace std;
class Rank{
public:
string stu;
int rank;
int score;
};
bool comp(Rank a,Rank b){//依照题目条件排序
return a.rank>b.rank ||
(a.rank==b.rank&&a.score<b.score) ||
(a.rank==b.rank&&a.score==b.score&&a.stu<b.stu);
}
int main() {
int n,m,count=0,i;
Rank r[1000];//对象数组,要开1000,开100会runtime error
cin>>n>>m;
while(cin>>r[count].stu){
int rank=0,score=0;
for(i=0;i<n;++i){
int x=0,y=0;
scanf("%d(%d)",&x,&y);
if(x>0){
score+=(x+y*m);
rank++;
}
}
r[count].rank=rank;
r[count].score=score;
count++;
}
sort(r,r+count,comp);
for(i=0;i<count;++i){
cout<<left<<setw(10)<<r[i].stu<<" ";
cout<<right<<setw(2)<<r[i].rank<<" ";
cout<<right<<setw(4)<<r[i].score<<endl;
}
return 0;
}
Conclusion
输入时不能复制,手打了一遍,麻烦麻烦!!!(所以贴上啦)
8 20
Smith -1 -16 8 0 0 120 39 0
John 116 -2 11 0 0 82 55(1) 0
Josephus 72(3) 126 10 -3 0 47 21(2) -2
Bush 0 -1 -8 0 0 0 0 0
Alice -2 67(2) 13 -1 0 133 79(1) -1
Bob 0 0 57(5) 0 0 168 -7 0
因为while中的条件是cin>>string,所以在控制台要键入Ctrl+Z才能结束输入。