比赛 “Asm.Def战记之拉格朗日点”杯 评测结果 AAAWWWWWWW
题目名称 Asm.Def找燃料 最终得分 30
用户昵称 YXH_YXH 运行时间 0.032 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2015-11-04 10:28:08
显示代码纯文本
  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstdio>
  4. using namespace std;
  5. const int MAXN=110,oo=200000000;
  6. int N;
  7. struct xy{
  8. int x,y;
  9. }a[MAXN];
  10. int Max=-1000,sum=0;
  11. double k,b;
  12. int tm1,tm2;
  13. void work(int t1,int t2){
  14. sum=2;//两点 确定一直线
  15. if(a[t1].x==a[t2].x){//竖直,无斜率
  16. for(int i=1; i<=N; i++){
  17. if(i==t1||i==t2)continue;
  18. if(a[i].x==a[t1].x)sum++;
  19. }
  20. }
  21. else{
  22. k=1.0*(a[t1].y-a[t2].y)/(a[t1].x-a[t2].x);
  23. b=a[t1].y-1.0*k*a[t1].x;
  24. //printf("%d %d :",t1,t2);
  25. //cout<<k<<' '<<b<<endl;
  26. for(int i=1; i<=N; i++){
  27. if(i==t1||i==t2)continue;
  28. if(abs(a[i].x*k+b-a[i].y)<=0.00000001)sum++;
  29. }
  30. }
  31. if(sum>Max)Max=sum;
  32. //cout<<sum<<endl;
  33. return;
  34. }
  35. int main(){
  36. freopen("asm_fuel.in","r",stdin);
  37. freopen("asm_fuel.out","w",stdout);
  38. cin>>N;
  39. for(int i=1; i<=N; i++)scanf("%d%d",&a[i].x,&a[i].y);
  40. for(int i=1; i<N; i++)
  41. for(int j=i+1; j<=N; j++){
  42. if(a[i].x==a[j].x&&a[i].y==a[j].y)//重点
  43. continue;
  44. else work(i,j);
  45. }
  46. cout<<sum<<endl;
  47. fclose(stdin);
  48. fclose(stdout);
  49. return 0;
  50. }
  51. /*
  52. abs
  53. */