北大2218题

来源:互联网 发布:ubuntu add to dash 编辑:程序博客网 时间:2024/05/01 16:14

 题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2218

这里主要涉及到一个数据的读入问题,经分析每行第一次得到的输入要么是START要么是END要么是人名,所以通过选择分支处理比较合适。再有就是一个排序,直接sort即可。

 

#include <iostream>
#include <algorithm>
using namespace std;

#define MAX 10

struct Person
{
 char name[21];
 int weight;
};

bool less(Person p1,Person p2)
{
 return p1.weight > p2.weight;
}

int main()
{
 freopen("in.txt","r",stdin);

 Person p[MAX];
 char tag[MAX];
 int i,j,days;
 while(cin >> tag)
 {
  if(strcmp(tag,"START") == 0)
   i = 0;
  else if(strcmp(tag,"END") == 0)
  {
   sort(p,p+i,less);
   for(j = 0;j < i;++j)
    cout << p[j].name << endl;
   cout << endl;
  }
  else
  {
   strcpy(p[i].name,tag);
   cin >> days >> p[i].weight;
   p[i].weight -= days;
   ++i;
  }
 }
 return 0;
}

原创粉丝点击