记录编号 204543 评测结果 AAAWWWWWWW
题目名称 [SYOI 2015] Asm.Def找燃料 最终得分 30
用户昵称 GravatarTear smile 是否通过 未通过
代码语言 C++ 运行时间 0.005 s
提交时间 2015-11-04 14:19:13 内存使用 0.48 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<utility>
  6. #include<vector>
  7. using namespace std;
  8. const int INF=0x3f3f;
  9. int ans[5000];
  10. typedef pair<int,int> PT;
  11. struct Point
  12. {
  13. int x,y;
  14. pair <int,int> pi[110];
  15. }pos[110];
  16. struct PP
  17. {
  18. int i;
  19. pair<int,int> al;
  20. }Q[5000];
  21. bool operator < (const PP &a,const PP &b)
  22. {
  23. if(a.al.first<b.al.first) return true;
  24. else return false;
  25. }
  26. int main()
  27. {
  28. freopen("asm_fuel.in","r",stdin);
  29. freopen("asm_fuel.out","w",stdout);
  30. int n;
  31. double tmp;
  32. scanf("%d",&n);
  33. for(int i=1;i<=n;i++)
  34. {
  35. scanf("%d%d",&pos[i].x,&pos[i].y);
  36. }
  37. for(int i=1;i<=n-1;i++)
  38. {
  39. int tm=1;
  40. for(int j=i+1;j<=n;j++)
  41. {
  42. if(pos[i].x==pos[j].x)
  43. {
  44. pos[i].pi[tm].first=INF;
  45. pos[i].pi[tm].second=pos[i].x;
  46. tm++;
  47. }
  48. else if(pos[i].y==pos[j].y)
  49. {
  50. pos[i].pi[tm].first=0;
  51. pos[i].pi[tm].second=pos[i].y;
  52. tm++;
  53. }
  54. else
  55. {
  56. tmp=(pos[j].y-pos[i].y)/(pos[j].x-pos[i].x);
  57. pos[i].pi[tm].first=tmp;
  58. tmp=pos[i].y-pos[i].x*tmp;
  59. pos[i].pi[tm].second=tmp;
  60. tm++;
  61. tmp=0;
  62. }
  63. }
  64. }
  65. int ti=(n*(n-1))/2;
  66. int sz=1;
  67. for(int i=1;i<=n-1;i++)
  68. {
  69. for(int j=1;j<=n-i;j++)
  70. {
  71. Q[sz].al.first=pos[i].pi[j].first;
  72. Q[sz].al.second=pos[i].pi[j].second;
  73. Q[sz].i=i;
  74. sz++;
  75. }
  76. }
  77. sz--;
  78. sort(Q+1,Q+sz);
  79. int MAXN=1,sum=1;
  80. for(int i=2;i<=ti;i++)
  81. {
  82. if(Q[i].al.first==Q[i-1].al.first && Q[i].al.second==Q[i-1].al.second && Q[i].i!=Q[i-1].i)
  83. {
  84. ans[sum]=Q[i].i;
  85. sum++;
  86. //if(sum>=MAXN) MAXN=sum;
  87. }
  88. }
  89. sum--;
  90. int answer=2;
  91. sort(ans+1,ans+sum+1);
  92. for(int i=1;i<=sum;i++)
  93. {
  94. if(ans[i]!=ans[i-1] && ans[i]!=0) answer++;
  95. }
  96. printf("%d",answer);
  97. return 0;
  98. }