(精)hdoj(双重排序)

原创 2012年03月25日 11:00:06
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
class Person
{
public:
 char name[100];
 char time[100];
 int rank;
};

int comp(const void *a,const void *b)
{
 Person *person1,*person2;
 person1=(Person*)a;
 person2=(Person*)b;


 //如果说时间相同的话
 if(!strcmp(person1->time,person2->time))
 {
  return strcmp(person1->name,person2->name); 
 }
 //如果时间不相同,按照时间排序
 else
 {
  return strcmp(person1->time,person2->time);
 }
/*
 return strcmp(person1->time,person2->time);
*/
}

int main()
{
 //freopen("in.txt","r",stdin);
 int n;
 int casen=0;
 while(scanf("%d",&n))
 {
  if(n==0)
  {
   return 0;
  }
  int i=0;
  
  Person person[20];
  for(i=0;i<n;i++)
  {
   scanf("%s %s",person[i].name,person[i].time);
  }

  qsort(person,n,sizeof(Person),comp);

  int rank=1;char time[100];
  strcpy(time,person[0].time);
  person[0].rank=1;
  for(i=1;i<n;i++)
  {
   //如果说前一个时间跟后一个时间相同
   if(!strcmp(person[i].time,time))
   {
    person[i].rank=person[i-1].rank; 
   }
   //如果说前一个时间跟后一个时间不相同
   else
   {
    rank++;
    person[i].rank=i+1;
    strcpy(time,person[i].time);
   }
  }

  //输出
  if(casen>0)
  {
   cout<<endl;
  }
  casen++;
  printf("Case #%d\n",casen);
  for(i=0;i<n;i++)
  {
   printf("%s %d\n",person[i].name,person[i].rank);
  }


 }
 return 0;
}

 













HDOJ1862 EXCEL排序(比较器)

题目本身不是很难,就是不能使用普通的排序。 需要使用util.Arrays的:(sort(T[] a,Comparator< ? super T> c)根据指定比较器产生的顺序对指定对象数组进行排序。...
  • qq_38238041
  • qq_38238041
  • 2017年12月13日 21:49
  • 88

ACM-一道简单的排序题(HDOJ 1031)Design T-Shirt

这道题理解之后很简单,所以发这道题也不是为了写下来思路,而是小总结。 刚看到这道题,理解了很久,然后看数据的时候,因为有一个小数影响了排版,把他们的总和计算错了 百度这道题,发现没怎么有。好吧,主...
  • hy1405430407
  • hy1405430407
  • 2015年01月26日 17:05
  • 664

逆序排序的使用练习 1 2 3 4 5 6 逆序成 6 5 4 3 2 1

//逆序排序的使用练习 public class NiSuPaiLie { public static void main(String[] args) { // 记录程序开始的时间 long ...
  • DuHacker
  • DuHacker
  • 2015年09月11日 12:44
  • 353

归并排序详解

归并排序的核心思想是将两个已经排序的序列合并成一个序列,那如何得到两个已经排序的序列呢?我们知道, 如果一个序列只有一个元素,那该序列是已经排序的,这样我们就可以利用分治的思想,将未排序的序列划分成更...
  • u014082714
  • u014082714
  • 2015年03月08日 12:23
  • 8002

“双重检验锁失效”的问题说明

双重检验锁是一个高效的懒加载方法,被广泛引用或应用于多线程环境中。但是,在Java中,如果没有额外的同步,它并不能以独立的方式可靠地工作。当在其它语言上时,比如C++,它依赖于处理器的内存模型,编译器...
  • zhanlanmg
  • zhanlanmg
  • 2015年11月20日 11:33
  • 1792

HDOJ 3790 最短路径问题(dijkstra算法)

最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot...
  • zwj1452267376
  • zwj1452267376
  • 2015年08月20日 00:48
  • 1496

HDOJ搜索题(总计100题)

DFS(Depth First Search ) 一般是不用hash的,所以很多时候称之为”暴力”,也就是穷举所有情况,一般看几个我们OJ的dfs的版本的题目就可以模仿着做了,因为牵涉到递归,初学者...
  • Ice_Crazy
  • Ice_Crazy
  • 2013年06月07日 14:02
  • 3590

双重检查加锁单例模式

双重检查加锁单例模式为什么失效,多线程下怎样实现安全的单例模式。了解Java内存模型,同步的语义...
  • u013673976
  • u013673976
  • 2015年02月14日 20:15
  • 1313

码一波题单+HDOJ题目分类

初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      (...
  • hhu1506010220
  • hhu1506010220
  • 2016年08月03日 20:59
  • 575

双重检查锁定(double-checked locking)与单例模式

单例模式有如下实现方式:package com.zzj.pattern.singleton; public class Singleton { private static Singleton i...
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2015年01月13日 12:11
  • 5576
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(精)hdoj(双重排序)
举报原因:
原因补充:

(最多只允许输入30个字)