poj1828
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的更多相关文章
随机推荐
- php生成的中文文件名会变成乱码,应该这样解决
现在php有很多类库,会生成文件,比如生成zip文件,生成二维码等等.这些类库用起来很爽,但是一旦生成带有中文的文件名,极有可能出现乱码. 问题:生成的中文文件名会变成乱码 解决:使用函数:iconv ...
- iconv
iconv -f 源字符集 -t 目标字符集 文件名 iconv -f UTF-8 -t GBK success.msg [root@perass ~]# cat success.msg | t ...
- Apache CloudStack多个跨站脚本漏洞(CVE-2013-2136)
漏洞版本: Apache Group CloudStack 4.1.0 Apache Group CloudStack 4.0.2 Apache Group CloudStack 4.0.1-incu ...
- iso学习网站记录
[零基础学习iOS开发] http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 非零基础学习iOS开发2-Objective-C h ...
- 数据结构(树状数组):HEOI2012 采花
[题目描述] 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便 ...
- 《算法问题实战策略》——chaper9——动态规划法技巧
Q1: 数字游戏: 两个人(A.B)用n个整数排成的一排棋盘玩游戏,游戏从A开始,每个人有如下操作: (1) 拿走棋盘最右侧或者最左侧的棋子,被拿走的数字从棋盘中抹掉. (2) 棋盘中还剩 ...
- zabbix web场景模拟监控配置
一,zabbix2.2.3 VMware Vsphere exsi监控配置步骤, 1,添加监控主机 2,添加聚集macro;{$PASSWORD} = yoodo.com{$URL} = http:/ ...
- Just a Hook
Just a Hook 题目大意:原来有N个铜棍, 一个人有种能力可以把一个区间的棍变成铜,银或者金的,价值分别是1,2,3, 最后求出总价值,没啥好说的,赤裸裸的线段树: Time Limit ...
- vs2012关闭IDE硬件加速设置
对于我这样的老古董电脑是很有必要的设置! 如图所示:
- SpringMVC DispatcherServlet 说明与web配置
使用Spring MVC,配置DispatcherServlet是第一步. DispatcherServlet是一个Servlet,所以能够配置多个DispatcherServlet. Dispatc ...