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 University的在线判题系统,简称Ural或URAL,是许多程序员磨炼技能的重要平台。它提供了丰富的算法题目,涵盖数据结构、图论、动态规划、数学等多个...
"Ural"是一款字体,可能是指一种特定的中文字体或者西文字体设计。在IT领域,字体扮演着至关重要的角色,特别是在图形设计、网页设计、出版印刷以及各种视觉传达中。字体的选择能够极大地影响信息的呈现效果和用户...
标题 "acm_ural_1148" 指向的是一个 ACM(国际大学生程序设计竞赛)问题,这个问题在 Ural University Online Judge(乌拉尔大学在线评测系统)上编号为 1148。描述中的 "Pascal acm_timus_ural_1148.pas" 表明提供...
"URAL3D"是一个与字体相关的主题,这通常指的是一个特定的三维字体设计或字体库。在计算机领域,字体是用于显示和打印文本的图形表示。它们由一系列字符形状组成,包括字母、数字和标点符号,每个都有其独特的样式和...
URAL部分测试数据是针对Timus Online Judge平台的一个竞赛或练习问题的数据集。Timus Online Judge是一个流行的在线编程竞赛和练习平台,它为参赛者提供了一系列的编程题目,以提升编程技能和算法理解能力。这个数据...
"ural部分题解"是一个关于编程竞赛平台Ural(也称为URAL Online Judge或University of Maribor Algorithmic contests)的解题集,由大牛出品。这个资源包含Vol1到Vol3的部分题目解答,虽然不完整,但大约涵盖了200道...
【标题】"acm_ural_1099" 是一个与编程竞赛相关的主题,通常在ACM(国际大学生程序设计竞赛)或类似的算法比赛中出现。这类问题旨在测试参赛者解决算法问题的能力,通常需要使用一种或多种编程语言来编写解决方案。 ...
Ural 1238 源代码 涉及算法(动态规划、贪心、DFS)
HDU、PKU和URAL是三个著名的在线编程竞赛平台,它们为程序员提供了丰富的算法题目,帮助参赛者提升编程技能和算法理解能力。这些平台的题目通常涵盖了基础算法、数据结构、数学逻辑等多个方面,对于准备各类编程竞赛...
《URAL题解》是针对ACM(国际大学生程序设计竞赛)中URAL在线判题系统题库的详尽解析,涵盖了从Vol_I到Vol_III的所有题目。这些文档旨在帮助参赛者理解和解决各种算法问题,提升编程技能,为比赛做好充分准备。 ...
**Ural开源库详解** Ural是一个开源的C++库,专为实现高效、灵活的线性代数计算而设计。这个库的核心特性是利用模板类来表示不同等级的张量,包括标量、向量(等级1)、矩阵(等级2)以及更高阶的张量(如等级3)。...
【Ural ACM 1000源代码(c++)】是一个编程竞赛相关的项目,其中包含了使用C++语言编写的源代码,这些代码是为了解决特定的算法问题而设计的。Ural ACM通常指的是乌拉尔大学(University of Ural)举办的算法竞赛,这...
URAL-PHA是一个与字体相关的主题。在这个压缩包中,我们看到只有一个文件名“2238”,这可能是某种特定字体的文件或者一个包含了多个字体文件的集合。在IT行业中,字体设计是用户界面和视觉传达的重要组成部分,尤其...
### Ural Volume I 题解 by yuhch123 #### 关于 yuhch123 yuhch123 是一位在 IT 和编程竞赛领域内有着卓越成就的人物,曾在 IOI 2008 中荣获金牌第一名。这份文档是他针对 Ural 编程题库第一卷的解答,对于学习算法...
资源分类:Python库 所属语言:Python 资源全名:ural-0.28.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
"ural"是一个与SCSS相关的项目,SCSS是Sass(Syntactically Awesome Style Sheets)的缩写,是一种预处理器语言,它扩展了CSS,增加了变量、嵌套规则、混合、函数等特性,使CSS编写更加简洁和可维护。在"ural-master...
- **URAL 1019**:此题要求计算区间覆盖的颜色,并统计最长相同颜色的区间。这需要在线段树中额外维护一些状态信息,比如每个区间被涂色的次数。 - **ZOJ 2301**:与URAL 1019类似,但这里是针对点进行染色操作。在...
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的项目,该项目在2021年的UNIT-Ural活动中进行。这可能是一个编程或技术开发项目,旨在为用户提供高质量的服务,就像父母为子女提供的关怀...
资源分类:Python库 所属语言:Python 资源全名:ural-0.25.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059