比赛 20161114 评测结果 RRRRRRRRRR
题目名称 欺负萌新的Rapiz 最终得分 0
用户昵称 最长上升子序列 运行时间 0.002 s
代码语言 C++ 内存使用 12.07 MiB
提交时间 2016-11-14 10:48:33
显示代码纯文本
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. #define long long lnt;
  6. using namespace std;
  7.  
  8. const int up=40+1,maxN=1000+5;
  9. bool vis[maxN][maxN];
  10. int node[up][up][up][up],n;
  11. struct nodes
  12. {
  13. int x,y,z,w;
  14. bool operator < (const nodes& b) const
  15. {
  16. if(x!=b.x) return x<b.x;
  17. else if(y!=b.y) return y<b.y;
  18. else if(z!=b.z) return z<b.z;
  19. else if(w!=b.w) return w<b.w;
  20. }
  21. } no[maxN];
  22.  
  23. int main()
  24. {
  25. freopen("xumingshi.in","r",stdin);
  26. freopen("xumingshi.out","w",stdout);
  27. int dx,dy,dz,dw,mx,y,z,w,sum,ans=2;
  28.  
  29. scanf("%d",&n);
  30. for(int i=0;i<n;i++)
  31. {
  32. scanf("%d %d %d %d",&no[i].x,&no[i].y,&no[i].z,&no[i].w);
  33. no[i].x+=20;no[i].y+=20;no[i].z+=20;no[i].w+=20;
  34. }
  35. sort(no,no+n);
  36. for(int i=0;i<n;i++) node[no[i].x][no[i].y][no[i].z][no[i].w]=i;
  37. for(int i=0;i<n;i++)
  38. {
  39. for(int j=i+1;j<n;j++) if(!vis[i][j])
  40. {
  41. if(no[i].x==no[j].x) sum=2;
  42. else sum=1;
  43. dx=no[i].x-no[j].x;dy=no[i].y-no[j].y;
  44. dz=no[i].z-no[j].z;dw=no[i].w-no[j].w;
  45. if(dx==0)
  46. {
  47. if(dy) dx=dy;
  48. else if(dz) dx=dz;
  49. else dx=dw;
  50. }
  51. for(int k=no[j].x;k<=no[n-1].x;k++)
  52. {
  53. mx=k-no[j].x;
  54. if(mx*dy%dx!=0 || mx*dz%dx!=0 || mx*dw%dx!=0) continue;
  55. y=no[j].y+mx*dy/dx;
  56. z=no[j].z+mx*dz/dx;
  57. w=no[j].w+mx*dw/dx;
  58. //cout<<k<<' '<<y<<' '<<z<<' '<<w<<endl;
  59. if(y>40 || z>40 || w>40) continue;
  60. if(node[k][y][z][w])
  61. {
  62. vis[j][node[k][y][z][w]]=1,sum++;
  63. //cout<<k<<' '<<y<<' '<<z<<' '<<w<<endl;
  64. }
  65. }
  66. ans=max(ans,sum);
  67. }
  68. }
  69. printf("%d\n",ans);
  70.  
  71. return 0;
  72. }