`

ural 1100 Final Standings

    博客分类:
  • Ural
 
阅读更多

1100. Final Standings

Time Limit: 1.0 second
Memory Limit: 16 MB
Old contest software uses bubble sort for generating final standings. But now, there are too many teams and that software works too slow. You are asked to write a program, which generates exactly the same final standings as old software, but fast.

Input

The first line of input contains only integer 1 < N ≤ 150000 — number of teams. Each of the next N lines contains two integers 1 ≤ ID ≤ 107 and 0 ≤ M ≤ 100. ID  — unique number of team, M  — number of solved problems.

Output

Output should contain N lines with two integers ID and M on each. Lines should be sorted by M in descending order using bubble sort (or analog).

Sample

input output
8
1 2
16 3
11 2
20 3
3 5
26 4
7 1
22 4
3 5
26 4
22 4
16 3
20 3
1 2
11 2
7 1

Hint

Bubble sort works following way:
while (exists A[i] and A[i+1] such as A[i] < A[i+1]) do
   Swap(A[i], A[i+1]);

Problem Author: Pavel Atnashev
Problem Source: Tetrahedron Team Contest May 2001

题目描述:

一道排序题目,就是要对一个结构体进行排序;但有一点特殊的要求就是要保证相同的m的数据,要保证原来的顺序,这样使用单纯的快排就会卡在第四组数据上;

那么我们如何处理?

使用bubble sort当然可以。这是显然的,但是时间上是会卡的;

那么肿么办?

改进快排,在结构体中添加一项order表示数据在原来所在的位置,当m相同时就按照order进行排序;

那么这样处理之后就可以了,经我测试ac。

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
    int id;
    int key;
    int n;
}stu[150050];
/*
void swap(int i,int j)
{
    int tempid=stu[i].id;
    int tempn=stu[i].n;
    stu[i].id=stu[j].id;
    stu[i].n=stu[j].n;
    stu[j].id=tempid;
    stu[j].n=tempn;
}*/
bool cmp(node a,node b)
{
    if(a.n==b.n)
        return a.key<b.key;
    else
    {
        return a.n>b.n;
    }
}
int main()
{
    int k;
    scanf("%d",&k);
    int i,j;
    for(i=0;i<k;i++)
    {
        scanf("%d%d",&stu[i].id,&stu[i].n);
        stu[i].key=i;
    }
    sort(stu,stu+k,cmp);
    /*
    for(i=0;i<k-1;i++)
    {
        for(j=i+1;j<k;j++)
        {
            if(stu[i].n<stu[j].n)
            {
                swap(i,j);
            }
        }
    }*/
    for(i=0;i<k;i++)
    {
        printf("%d %d\n",stu[i].id,stu[i].n);
    }
    //system("pause");
    return 0;
    
}

 很短很easy~

但是如果仅仅是这样那么这道题目就是一道纯水题。写出来也没有什么意思,那么当你看m时你会发现,-1<m<101的!

这很关键,看到这里有想法了吗?

笔者想到了序数排序;以m为序数,按原来书序插入即可!

代码如下:

#include <iostream>
using namespace std;
struct node
{
    int id;
    int m;
    node* next;
}stu[150050];
struct list
{
    node* head;
    node* next;
}L[110];
void Init()
{
    int i;
    for(i=0;i<110;i++)
    {
        L[i].head=NULL;
        L[i].next=NULL;
    }
}       
int main()
{
    int n;
    cin>>n;
    int i,j;
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&stu[i].id,&stu[i].m);
        if(L[stu[i].m].head==NULL)
        {
            L[stu[i].m].head=&stu[i];
            L[stu[i].m].next=L[stu[i].m].head;
            stu[i].next=NULL;
        }
        else
        {
            L[stu[i].m].next->next=&stu[i];
            L[stu[i].m].next=&stu[i];
            stu[i].next=NULL;
        }   
    }
    for(i=100;i>=0;i--)
    {
        if(L[i].head)
        {
            node* p=L[i].head;
            while(p)
            {
                printf("%d %d\n",p->id,p->m);
                p=p->next;
            }
        }
    }
    //system("pause");
    return 0;
}
 

这样下来时间比快排还少一些;但是由于使用了很多指针,内存消耗打了很多;

 

还可以使用桶排序:笔者没有写和上面的想法基本是一致的;

短小精悍:

    program URAL_1100;  
    var  
      id:array[1..150000] of longint;  
      score:array[1..150000] of shortint;  
      i,k,n:longint;  
    begin  
      readln(n);  
      for i:=1 to n do  
        readln(id[i],score[i]);  
      for k:=100 downto 0 do  
        for i:=1 to n do  
          if score[i]=k then  
            writeln(id[i],' ',k);  
    end.  

 这样的一道题目,其实很简单但是极为经典。

你想到了几种呢?

分享到:
评论

相关推荐

    Ural URAL 解题思路

    《Ural URAL 解题思路》 在编程竞赛和算法挑战的世界中,Ural University的在线判题系统,简称Ural或URAL,是许多程序员磨炼技能的重要平台。它提供了丰富的算法题目,涵盖数据结构、图论、动态规划、数学等多个...

    Ural

    "Ural"是一款字体,可能是指一种特定的中文字体或者西文字体设计。在IT领域,字体扮演着至关重要的角色,特别是在图形设计、网页设计、出版印刷以及各种视觉传达中。字体的选择能够极大地影响信息的呈现效果和用户...

    acm_ural_1148

    标题 "acm_ural_1148" 指向的是一个 ACM(国际大学生程序设计竞赛)问题,这个问题在 Ural University Online Judge(乌拉尔大学在线评测系统)上编号为 1148。描述中的 "Pascal acm_timus_ural_1148.pas" 表明提供...

    URAL3D

    "URAL3D"是一个与字体相关的主题,这通常指的是一个特定的三维字体设计或字体库。在计算机领域,字体是用于显示和打印文本的图形表示。它们由一系列字符形状组成,包括字母、数字和标点符号,每个都有其独特的样式和...

    URAL部分测试数据

    URAL部分测试数据是针对Timus Online Judge平台的一个竞赛或练习问题的数据集。Timus Online Judge是一个流行的在线编程竞赛和练习平台,它为参赛者提供了一系列的编程题目,以提升编程技能和算法理解能力。这个数据...

    ural部分题解

    "ural部分题解"是一个关于编程竞赛平台Ural(也称为URAL Online Judge或University of Maribor Algorithmic contests)的解题集,由大牛出品。这个资源包含Vol1到Vol3的部分题目解答,虽然不完整,但大约涵盖了200道...

    acm_ural_1099

    【标题】"acm_ural_1099" 是一个与编程竞赛相关的主题,通常在ACM(国际大学生程序设计竞赛)或类似的算法比赛中出现。这类问题旨在测试参赛者解决算法问题的能力,通常需要使用一种或多种编程语言来编写解决方案。 ...

    Ural 1238 源代码

    Ural 1238 源代码 涉及算法(动态规划、贪心、DFS)

    hdu pku ural 题目分类

    HDU、PKU和URAL是三个著名的在线编程竞赛平台,它们为程序员提供了丰富的算法题目,帮助参赛者提升编程技能和算法理解能力。这些平台的题目通常涵盖了基础算法、数据结构、数学逻辑等多个方面,对于准备各类编程竞赛...

    ural题解

    《URAL题解》是针对ACM(国际大学生程序设计竞赛)中URAL在线判题系统题库的详尽解析,涵盖了从Vol_I到Vol_III的所有题目。这些文档旨在帮助参赛者理解和解决各种算法问题,提升编程技能,为比赛做好充分准备。 ...

    Ural-开源

    **Ural开源库详解** Ural是一个开源的C++库,专为实现高效、灵活的线性代数计算而设计。这个库的核心特性是利用模板类来表示不同等级的张量,包括标量、向量(等级1)、矩阵(等级2)以及更高阶的张量(如等级3)。...

    Ural ACM 1000源代码(c++)

    【Ural ACM 1000源代码(c++)】是一个编程竞赛相关的项目,其中包含了使用C++语言编写的源代码,这些代码是为了解决特定的算法问题而设计的。Ural ACM通常指的是乌拉尔大学(University of Ural)举办的算法竞赛,这...

    URAL-PHA

    URAL-PHA是一个与字体相关的主题。在这个压缩包中,我们看到只有一个文件名“2238”,这可能是某种特定字体的文件或者一个包含了多个字体文件的集合。在IT行业中,字体设计是用户界面和视觉传达的重要组成部分,尤其...

    ural vol I 题解 by yuhch123 pdf

    ### Ural Volume I 题解 by yuhch123 #### 关于 yuhch123 yuhch123 是一位在 IT 和编程竞赛领域内有着卓越成就的人物,曾在 IOI 2008 中荣获金牌第一名。这份文档是他针对 Ural 编程题库第一卷的解答,对于学习算法...

    Python库 | ural-0.28.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:ural-0.28.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    ural

    "ural"是一个与SCSS相关的项目,SCSS是Sass(Syntactically Awesome Style Sheets)的缩写,是一种预处理器语言,它扩展了CSS,增加了变量、嵌套规则、混合、函数等特性,使CSS编写更加简洁和可维护。在"ural-master...

    线段树题目

    - **URAL 1019**:此题要求计算区间覆盖的颜色,并统计最长相同颜色的区间。这需要在线段树中额外维护一些状态信息,比如每个区间被涂色的次数。 - **ZOJ 2301**:与URAL 1019类似,但这里是针对点进行染色操作。在...

    PART II THE URAL-ALTAIC HYPOTHESIS CHAPTER IV. THE URAL-ALTAIC HYPOTHESIS AND TUNGUS MATERIAL (1931年)

    28. The Theoretical Background of the Ural-Altale Hypothesis The hypothesis of common origin of the Altaic languages,and even the Ural-Altaic languages,dates from the first half of the last century....

    skillactive:UNIT-Ural 2021的项目

    【标题】"skillactive:UNIT-Ural 2021的项目" 提供的是一个名为SkillActive的项目,该项目在2021年的UNIT-Ural活动中进行。这可能是一个编程或技术开发项目,旨在为用户提供高质量的服务,就像父母为子女提供的关怀...

    Python库 | ural-0.25.0-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:ural-0.25.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics