poj 2606 Rabbit hunt【同一条直线上的点】
我想这道2606在一条线上面杀死兔子和上一题1118的在一条线上面投放炸弹貌似没有什么不同。。。如果硬要扯点不同就是1118没有交代坐标点 的正负,而2606交代了。。。反正这种解法对于是否包含负数没有影响
直接在上一题的基础上改了一下就顺利AC。。。
而且我这次好奇的试了一下1118中效率较低的代码,也AC了,可能是因为这里的N是小于200,而且只有一组测试数据的缘故吧
AC的代码之一(高效版):
#include <stdio.h> int x[202],y[202]; int main() { int n; scanf("%d",&n); int i; //输入坐标点的值 for(i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); //暴搜开始 int count,max=-1; int j,k; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) { count=2; for(k=j+1;k<=n;k++) if((y[i]-y[k])*(x[j]-x[k])==(y[j]-y[k])*(x[i]-x[k])) count++; if(max<count) max=count; } printf("%d\n",max); return 0; }
AC代码之二(低效版):
#include <stdio.h> int x[202],y[202]; int main() { int n; scanf("%d",&n); int i; //输入坐标点的值 for(i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); //暴搜开始 int count,max=-1; int j,k; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(j==i) continue; count=2; for(k=1;k<=n;k++) { if(k==i || k==j) continue; if((y[i]-y[k])*(x[j]-x[k])==(y[j]-y[k])*(x[i]-x[k])) count++; } if(max<count) max=count; } printf("%d\n",max); return 0; }
最后更新:2017-04-03 14:53:45