poj1828

【问题的描述】是这样的:程序猿的近亲 猴子(......)最近在进行王位争夺站。

题中使用二维坐标轴上的点(x,y)来代表猴子所占有的位置,

每只猴子占有一个坐标点。并且一个坐标点上面有且只有一个猴子。

如果说一直猴子是王位的继承者的话,那么这只猴子所占有的坐标(x0,y0)必须满足这样的一个条件:

一定不存在这样的一个坐标点(xi,yi)使得(xi >= x0)  and (yi >= yo).

下面需要你用程序来实现在众多组(case)二维坐标数值(x,y)中选取出

该组(case)的有可能为猴王的猴子数目的总数目。结束输入用0来表示。

输入样例:

3
2 1
1 2
3 3
3
0 1
1 0
0 0
4
0 0
1 0
0 1
1 1
0

输出样例:

1
2
1

【算法描述:】

最近才知道,对于测试case数目不一定的情况,可以用结束标志(此题为0)来做为判断循环条件,

针对一组case数据输入,跑一次算法,然后得出一个输出结果,然后将其提交给poj。

如此下来如果结果是正确的话,poj服务器端也是会AC的(好吧,这是LZ最近才知道的....)。

伪代码:

typedef struct
{
int x;
int y;
}monkey; int cmp_x(a, b)
{
monkey *m1,*m2; m1<- (monkey*)a;
m2 <- (monkey*)b if m1->x != m2->x
return m2->x - m1->x;
else
return m2->y -m1->y; }//used in inverse qsort large -> small monkey Monkey[50000]; while(~scanf( n ) && n !=0)
{
for(i 0 -> n-1)
{
scanf(Monkey[i],x, Monkey[i].y);
} qsort(Monkey, n, sizeof(monkey), cmp);
//after this sort the x (large -> small)
//and if the value of the x equal , then the value of y (large -> small) num =1;//this is use to count how many kings in the input test case maxY = monkey[0].y; for(i 1->n-1)
{
if(maxY > monkey[i].y)
{
num++;
maxY = monkey[i].y;
}
} printf (num); }

【实现代码:为以后优化代码作参照比对】

#include<stdio.h>
#include<algorithm> typedef struct
{
int x;
int y;
}monkey; monkey Monkey[];
//this is for test int cmp_x(const void *a, const void *b)
{
monkey *m1,*m2;
m1 = (monkey*)a;
m2 = (monkey*)b; if(m1->x!=m2->x)
return m2->x - m1->x;
else
return m2->y - m1->y;
} int main()
{
int n;
int i;
int num, maxY; while(~scanf("%d", &n) && n!=)
{ for(i = ; i <n; i++)
{
scanf("%d %d", &Monkey[i].x, &Monkey[i].y );
} qsort(Monkey, n, sizeof(monkey), cmp_x); num = ;
maxY = Monkey[].y; for(i = ; i < n; i++)
{
if(Monkey[i].y > maxY)
{
maxY = Monkey[i].y;
num++;
}
} printf("%d\n", num);
} }

可以看一下注释哪一行:

this is for test,因为目前做的题比较少,阅读的代码量也不是很多。

【学习总结:】每当看到别人的代码大批大批静态分配空间的时候,总是很不理解。

但是这次,LZ使用了malloc进行动态分配内存的方式,每次根据输入的n数值开辟对应的n个monkey空间。

结果优化的策略全部泡汤,时间,空间,代码量全部上升。

就目前的水平,一时半会很难找到适合的代替qsort的方法

本想用并查集来解决该问题的,目前暂时的想法是这样的:

makeSet,findSet的基本实现方法是不用做太多调整的。

而对于unionSet这一个方法就不能简单地从判断矢量高度或是集合中元素的个数来对传入的两个数据进行二者所在集合的合并。

这个还没有想好,或是从问题的条件设定根本行不通,就先放在这里吧。呵呵~

poj1828的更多相关文章

随机推荐

  1. jsp页面传参到action出现乱码

    jsp页面以连接方式传参到后台action时( <a href="http://localhost:8080/SocialBook/pages/bookdetail?book.id=& ...

  2. I2C总线之(三)---以C语言理解IIC

    为了加深对I2C总线的理解,用C语言模拟IIC总线,边看源代码边读波形: 如下图所示的写操作的时序图: 读时序的理解同理.对于时序不理解的朋友请参考“I2C总线之(二)---时序” 完整的程序如下: ...

  3. 15个你不知道的杀手级Google Chrome功能

    之前写过一篇我为什么使用Google Chrome浏览器,算是在使用了一段时间的Google Chrome后的一点粗浅认识,最近读到一篇文章15 Killer Google Chrome Featur ...

  4. sublime sftp 插件安装及破解

    必备插件sftp: 1,Package Control可以用来install其他package 2,sftp远程编辑文件:安装:install->sftp具体配置 sftp工具破解     1, ...

  5. ​? super T ? extends T

    ​? super T ?保存的是  T类型或者T类型的父类 ​ ? extends T ?保存的是  T类型或者T类型的子类

  6. Bluetooth LE(低功耗蓝牙) - 第四部分

    回顾 在本系列前几篇文章中我们完成了BLE设备的发现 , 为我们的app通过BLE显示从TI SensorTag设备中获取到环境温度和湿度的工作打下了基础.在这篇文章中我们将着眼于连接到我们所发现的S ...

  7. -_-#gb2312解码

    百度视频采用gb2312编码,点击出来的链接中的中文转成了gb2312,而gb2312无法解码 如果链接中的中文直接utf-8编码,就没问题,但编辑后台有长度限制 关于URL编码 JS(Unicode ...

  8. senrty 配置Email

    测试页面在这里      右上角头像->管理->邮件 配置如下:(注意一点:465是SSL的 587是TLS的) 其他django email 1.3 文献在这里  现在都1.8了貌似 如 ...

  9. 公有云开启全面竞争时代——青云QingCloud

    网界网本期[封面报道]公有云开启全面竞争时代 [CNW.com.cn 专稿] 险滩急流之后,公有云[注]服务市场的开拓者们终于看到了一片丰饶之海. 2013年,中国云计算[注]产业起步的第五年,公有云 ...

  10. java传递json数据到前台jsp

    在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: JSON字符串: var str1 = '{ &q ...