题目内容:

Description

“不要问我太阳有多高 
我会告诉你我有多真 
不要问我星星有几颗 
我会告诉你很多很多”

一天Qinz和wudired在天上数星星,由于星星可以排列成一条直线,他们比赛看谁能找到一条直线使得这条直线上的星星最多。假设夜空是一个二维平面坐标系,坐标轴为x,y。星星的坐标(x,y)为整数,且同一位置至多有一颗星星。他们需要你的帮助,一条直线最多可以穿过多少颗星星(直线不必平行于坐标轴)?

Input
  多组数据,EOF结束。 
  第一行N(0<=N<=1000)为天上星星的数量。 
  接下来N行每行两个数字 X,Y(0<=X,Y<=10^9),表示星星的位置。以空格分开。
Output
  输出一行,表示一条直线最多穿过多少颗星星。
Sample Input
3
1 1
2 2
3 3
Sample Output
3
 
解题思路:
从每个点当作起始点,计算和其他点之间的斜率,如果一点A,到B和C斜率的绝对值相同,那么这三个点在一条线上,以此类推,算出在同一条直线上最多的点数
 
代码如下:
 #include <stdio.h>
#include <stdlib.h>
#include <math.h> #define MAX_NUM 1000 int cmp(const void * a , const void * b)
{
if(*(double *)a > *(double *)b){
return ;
}
return - ;
} double k(int x , int y , int x1 , int y1)
{
if(x == x1){
return 1E10 ;
}
return (double)(y1 - y) / (x1 - x) ;
} int cal(int p[][] , int num)
{
if(num < ){
return num ;
}
double line[MAX_NUM] ;
int res = , i , x , y , j;
for(i = ; i < num ; i++){
x = p[i][] ;
y = p[i][] ;
for(j = i+ ; j < num ; j++){
line[j] = k(x,y,p[j][],p[j][]) ;
}
qsort(line+i+,num-i-,sizeof(double),cmp);
int k = ;
for(j = i+ ; j < num ; j++){
if(fabs(line[j]-line[j-]) < 1E-){
k++ ;
}else{
if(k+>res){
res = k ;
}
k = ;
}
}
if(k>res){
res = k ;
}
}
return res ;
} int main()
{
int point[MAX_NUM][] ;
int i , num;
while(scanf("%d",&num)!=EOF){
for(i = ; i < num ; i++){
scanf("%d%d",&point[i][],&point[i][]);
}
printf("%d\n",cal(point,num));
}
}

题解西电OJ (Problem 1008 - 数星星)的更多相关文章

  1. 题解西电OJ (Problem 1007 -做一名正气的西电人 )--长整型计算

    Description 一天,wm和zyf想比比谁比较正气,但正气这种东西无法量化难以比较,为此,他们想出了一个方法,两人各写一个数字,然后转化为二进制,谁的数字中二进制1多谁就比较正气! Input ...

  2. 题解西电OJ (Problem 1006 - 转盘游戏)--动态规划

    题目链接 : http://acm.xidian.edu.cn/land/problem/detail?problem_id=1006 Description wm最近喜欢上一种无聊的转盘解锁游戏,他 ...

  3. 题解西电OJ (Problem 1004 -亚特兰提斯)--最小生成树

    Description 为了找寻沉睡的亚特兰提斯大陆,wm来到了大西洋上进行探险,找了半个月仍一无所获.然而在一次突袭而来的暴风雨后,wm的船莫名地驶入了一片未知的区域,发现了一个地图上未标记的岛屿, ...

  4. 题解西电OJ (Problem 1003 -最喜欢的数字)--动态规划

    Description zyf最喜欢的数字是1!所以他经常会使用一些手段,把一些非1的数字变 成1,并为此得意不已.他会且仅会的两种手段是: 1.把某个数m除以某个质数p——当然p必须能整除这个数,即 ...

  5. 题解西电OJ (Problem 1005 -跳舞毯)--动态规划

    Description zyf不小心得了一种怪病,为了维持一天的精力他必须不停跳动.于是他买了一条跳舞毯,每天跳上几小时.众所周知,跳舞毯是给定一个序列,让你在指定时间踏指定的按钮,但zyf似乎不怎么 ...

  6. 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)

    今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...

  7. 杭电oj 2095 & 异或^符号在C/C++中的使用

    异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果. 值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终 ...

  8. SCAU-1144 数星星-HDU-1166-树状数组的应用

    本文借鉴代码提供:https://www.cnblogs.com/geek1116/p/5566709.html树状数组详解:https://www.cnblogs.com/xenny/p/97396 ...

  9. codev 2147 数星星

    2147 数星星 http://codevs.cn/problem/2147/ 题目描述 Description 小明是一名天文爱好者,他喜欢晚上看星星.这天,他从淘宝上买下来了一个高级望远镜.他十分 ...

随机推荐

  1. spoj 390

    简单题  记得uva上有个一样的  画个图就好了 #include <cstdio> #include <cmath> const double pi = acos(-1); ...

  2. Jetty实践-Hello World

    该程序摘自官网教程: 1.首先去Jetty官网,下载jetty-distribution-9.2.6.v20141205.zip,Jetty Jar包,解压到任意目录: 2.使用Eclipse新建一个 ...

  3. 深入浅出ShellExecute

    Q: 如何打开一个应用程序? ShellExecute(this->m_hWnd,"open","calc.exe",""," ...

  4. POJ3204+DInic+maxflow

    Dinic+maxflow题意:找这样一种边的个数,就是增加该边的容量,可以使得最大流变大思路:求maxflow,再枚举流量为0的边,增加容量,看是否能找到增广路径. /* Dinic+maxflow ...

  5. linux踢人命令 pkill踢人用法

    首先使用who命令查看在线用户,然后踢人. 强制踢人命令格式:pkill -kill -t tty 解释: pkill -kill -t 踢人命令 tty 所踢用户的TTY或者pts/x(x代表数字) ...

  6. cctype头文件(字符处理库)的使用

    C++ 中cctype头文件的使用 头文件cctype(字符处理库)中定义了有关字符判断与处理的库函数,使用前要包含头文件: #include <cctype> using namespa ...

  7. iOS如何把导航默认的返回按钮设置成“返回”

    版权声明:本CSDN博客所有文章不更新,请关注标哥博客:http://www.henishuo.com/ - (void)addBackItemWithAction:(SEL)action { if  ...

  8. R语言中的箱图介绍 boxplot

    画箱图的函数: boxplot()##help(boxplot)查询具体用法   图例的解释: 如下图,是两个简单的箱图. 中间的箱子的上下边,分别是第三,一个四分位数. 中间的黑线是第二四分位数(中 ...

  9. 关于Firefox浏览器如何支持ActiveX控件,一个小的Hellow World

    今天尝试开发一个Firefox的插件.虽然比较简单,网上也有很多教程,但是感觉一些教程写的比较麻烦,在初步的开发过程中并没有用到那些东西,于是自己把开发过程记录下来.我是根据Mozilla官方教程开发 ...

  10. linux bash脚本把A和B文件中有相同ID的B文件的内容输出到文件C

    bash脚本把A和B文件中有相同ID的B文件的内容输出到文件C. Aid文件:ID001.1ID032.1ID090.10 Bfilt文件:XX XX XXX ID001.1 XXX999999999 ...