http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=570&pid=1001

http://acm.hdu.edu.cn/showproblem.php?pid=5182

这道题也是hdu上的5182

官方题解:

对于输入的每一行一两个整数作差,按照差值从大到小排序,如果差值一样,按照后面的整数从小到大排序,如果还是一样按照ID从小到大排序。

首先注意下数据范围,大约100组数据,所有整数都在[1,100] 的范围内,即使是用冒泡法或者选择法排序也不会TLE。其次就要考虑如何将城市的标号一并排序,可以构建一个专门保存城市标号的数组,排序的时候按城市标号对应的数据进行比较,只改变城市标号的位置,数据不用排序。、

先贴一个最简单的代码。

#include<stdio.h>

int main()
{
int i,j,n,pm[][],c[],t,s[]; while(scanf("%d",&n)!=EOF)
{
for(i=;i<n;i++)
{
scanf("%d%d",&pm[i][],&pm[i][]);
c[i]=pm[i][]-pm[i][];
s[i]=i; //s数组记录城市的标号
}
for(i=;i<n-;i++) //首先按照差值排序,注意只是将城市的标号排序
{
for(j=;j<n--i;j++)
{
if(c[s[j]]<c[s[j+]])
{
t=s[j];
s[j]=s[j+];
s[j+]=t;
}
}
}
for(i=;i<n-;i++) //按照第二次的测量值升序排序,同样将城市的标号排序
{
if(c[s[i]]==c[s[i+]])
{
if(pm[s[i]][]>pm[s[i+]][])
{
t=s[i];
s[i]=s[i+];
s[i+]=t;
if(i>)
i=i-;
}
}
}
for(i=;i<n-;i++) //按照输入的顺序排序
{
if(c[s[i]]==c[s[i+]])
{
if(pm[s[i]][]==pm[s[i+]][])
{
if(s[i]>s[i+])
{
t=s[i];
s[i]=s[i+];
s[i+]=t;
if(i>)
i=i-;
}
}
}
}
for(i=;i<n;i++)
{
if(i==)
printf("%d",s[i]);
else
printf(" %d",s[i]);
}
printf("\n");
}
return ;
}

赛后觉得时间用的太多,发现可以用一个结构体将数据保存,用sort函数排序,只要写一下cmp函数。

代码如下:

#include<stdio.h>
#include<algorithm> using namespace std; struct node
{
int pm1;
int pm2;
int decrease;
int number;
}city[]; bool cmp(struct node x,struct node y)
{
if(x.decrease!=y.decrease)
return x.decrease>y.decrease;
if(x.pm2!=y.pm2)
return x.pm2<y.pm2;
return x.number<y.number;
} int main()
{
int n; while(scanf("%d",&n)!=EOF)
{
for(int i=;i<n;i++)
{
scanf("%d%d",&city[i].pm1,&city[i].pm2);
city[i].decrease=city[i].pm1-city[i].pm2;
city[i].number=i;
}
sort(city,city+n,cmp);
for(int i=;i<n;i++)
{
if(i==)
printf("%d",city[i].number);
else
printf(" %d",city[i].number);
}
printf("\n");
}
return ;
}

BestCoder Round #32_1001 以及 hdu 5182的更多相关文章

  1. BestCoder Round #34_1002 以及 hdu 5191

    枚举最终的W堆积木在哪,确定了区间,那么就需要把高于H的拿走,低于H的补上,高处的积木放到矮的上面,这样最优. 注意多出来的积木可以放在已有积木的前面或者后面,独立成一堆积木,所以需要在n堆积木的前后 ...

  2. HDU 5904 - LCIS (BestCoder Round #87)

    HDU 5904 - LCIS [ DP ]    BestCoder Round #87 题意: 给定两个序列,求它们的最长公共递增子序列的长度, 并且这个子序列的值是连续的 分析: 状态转移方程式 ...

  3. HDU 5908 Abelian Period (BestCoder Round #88 模拟+暴力)

    HDU 5908 Abelian Period (BestCoder Round #88 模拟+暴力) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=59 ...

  4. hdu 5667 BestCoder Round #80 矩阵快速幂

    Sequence  Accepts: 59  Submissions: 650  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536 ...

  5. hdu 5643 BestCoder Round #75

    King's Game  Accepts: 249  Submissions: 671  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 6 ...

  6. hdu 5641 BestCoder Round #75

    King's Phone  Accepts: 310  Submissions: 2980  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  7. hdu 5636 搜索 BestCoder Round #74 (div.2)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  8. hdu 4956 Poor Hanamichi BestCoder Round #5(数学题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4956 Poor Hanamichi Time Limit: 2000/1000 MS (Java/Ot ...

  9. hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]

    传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131 ...

随机推荐

  1. thinkphp 面向切面编程-行为拓展

    thinkphp的CBD模式 核心保留了最关键的部分,并在重要位置设置了标签用以标记,其他功能都采用行为扩展和驱动的方式组合,开发人员可以根据自己的需要,对某个标签位置进行行为扩展或者替换,就可以方便 ...

  2. jenkins+ANT+jmeter 接口测试环境搭建

    目的 jmeter很早就接触了,最近又在接触项目的时候整了一下.写这篇博客主要有两个目的 1,为了给自己搭建jmeter做一个总结. 2,在部署过程中遇到过一些坑,在这分享出来,也希望能给需要的人一个 ...

  3. 小程序server-实现会话层

    小程序server-实现会话层开发教程: 1.安装MongoDB #安装 MongoDB及其客户端命令行工具 yum install mongodb-server mongodb -y #查看版本 m ...

  4. Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    这个问题当然是找不到mysql的驱动类,可能是环境CLASSPATH有问题或者就是那个人没有加载jdbc的驱动.我在网上下载mysql-connector-java-5.0.8-bin.jar一个这个 ...

  5. Linux - 简明Shell编程03 - 字符串(String)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash str="Shell ...

  6. Celery 使用(一)

    Celery 使用(一) 架构 Producer:任务发布者: Celery Beat:任务调度器,Beat进程会读取配置文件中的内容,周期性的将配置中到期需要执行的任务发送给任务队列: Broker ...

  7. VBS windows监控

    http://bbs.csdn.net/topics/230078112'/************************************************************** ...

  8. trycatch放在for循环的里面还是外面好

    try放在for循环里面和外面的区别是什么呢?先看看下面的代码的区别:public class Test {    public void test1(){        for (int count ...

  9. python-----运算符及while循环

    一.运算符 计算机可以进行的运算有很多种,不只是加减乘除,它和我们人脑一样,也可以做很多运算. 种类:算术运算,比较运算,逻辑运算,赋值运算,成员运算,身份运算,位运算,今天我们先了解前四个. 算术运 ...

  10. [js高手之路] dom常用节点属性兼容性详解与应用

    一.每个DOM节点都有一个nodeType属性,表示节点类型, NodeType一共有12种类型,我们可以通过遍历内置的Node构造函数获取 window.onload = function(){ v ...