欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HDOJ 2093

程序员文章站 2024-03-15 16:27:54
...

Title

HDOJ 2093
HDOJ 2093

Point

  1. 输入部分:对于 111(5) 这类数据的输入可用scanf( “%d(%d)”,&x,&y );
  2. 操作部分:排序用定义在algorithm头文件里的sort函数,默认排列为升序。编写comp函数可实现按指定值升序、降序等。sort不仅对一般数组适用,vector、对象数组和结构体数组等也适用。
  3. 输出部分:利用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才能结束输入。