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. [wikioi]数字三角形

    http://wikioi.com/problem/1220/ 最基本经典的DP题目,唯一有点意思的是,自底向上计算会更简洁.另外对这种+方式累计的DP,可以直接把原来的存进去,然后再加,本质是不用在 ...

  2. [置顶] linux内核启动2-setup_arch中的内存初始化(目前分析高端内存)

    上一篇微博留下了这几个函数,现在我们来分析它们         sanity_check_meminfo();         arm_memblock_init(&meminfo, mdes ...

  3. c++复习基础要点02 虚函数与模板 与static inline是否共存

    1.      虚函数能否定义为模板函数 当一个类有虚函数时,它一定有一个虚表,用来纪录每个虚函数的实际地址.这也就是说这个虚表的大小是在编译期就确定了的.有多少个虚函数,虚表就纪录几个.       ...

  4. android.graphics.Matrix

    Matrix类包含了一个3x3的矩阵用来改变坐标,它没有一个构造器来初始化它里边的内容,所以创建实例后需要调用reset()方法生成一个标准matrix,或者调用set..一类的函数,比如setTra ...

  5. python换行写入文件

    今天用python做写入文件时,碰到,写入的东西不能换行,打开写入的文件都是一行.后来发现需要在写入的字符后面加上+'\n'. 另外python需要追加写入文件的时候,是用这个方法f = open(' ...

  6. 支付宝APP支付Java回调具体步骤

    /** * 支付宝异步请求通知 * * @param request * @return */@RequestMapping(value = "async", method = R ...

  7. 这几天阅读的shadowgun的几个shader

    直接从阅读时记录的笔记摘抄过来,写的比较随意. 1. MADFINGER-blinking-god-rays 除了可以用于实现太阳光线效果,还能调整参数让颜色随时间淡入淡出闪烁,能做出想灯光之类的效果 ...

  8. leetcode 最大矩形和

    1.枚举法(超时) public class Solution { public int largestRectangleArea(int[] height) { int max=-1; for(in ...

  9. 20个 Unix/Linux 命令技巧

    让我们用这些Unix/Linux命令技巧开启新的一年,提高在终端下的生产力.我已经找了很久了,现在就与你们分享. 删除一个大文件 我在生产服务器上有一个很大的200GB的日志文件需要删除.我的rm和l ...

  10. Install MongoDB on Windows (Windows下安装MongoDB)

    Install MongoDB on Windows Overview Use this tutorial to install MongoDB on a Windows systems. PLATF ...