比赛 |
20161114 |
评测结果 |
RRRRRRRRRR |
题目名称 |
欺负萌新的Rapiz |
最终得分 |
0 |
用户昵称 |
最长上升子序列 |
运行时间 |
0.002 s |
代码语言 |
C++ |
内存使用 |
12.07 MiB |
提交时间 |
2016-11-14 10:48:33 |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define long long lnt;
using namespace std;
const int up=40+1,maxN=1000+5;
bool vis[maxN][maxN];
int node[up][up][up][up],n;
struct nodes
{
int x,y,z,w;
bool operator < (const nodes& b) const
{
if(x!=b.x) return x<b.x;
else if(y!=b.y) return y<b.y;
else if(z!=b.z) return z<b.z;
else if(w!=b.w) return w<b.w;
}
} no[maxN];
int main()
{
freopen("xumingshi.in","r",stdin);
freopen("xumingshi.out","w",stdout);
int dx,dy,dz,dw,mx,y,z,w,sum,ans=2;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d %d %d %d",&no[i].x,&no[i].y,&no[i].z,&no[i].w);
no[i].x+=20;no[i].y+=20;no[i].z+=20;no[i].w+=20;
}
sort(no,no+n);
for(int i=0;i<n;i++) node[no[i].x][no[i].y][no[i].z][no[i].w]=i;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++) if(!vis[i][j])
{
if(no[i].x==no[j].x) sum=2;
else sum=1;
dx=no[i].x-no[j].x;dy=no[i].y-no[j].y;
dz=no[i].z-no[j].z;dw=no[i].w-no[j].w;
if(dx==0)
{
if(dy) dx=dy;
else if(dz) dx=dz;
else dx=dw;
}
for(int k=no[j].x;k<=no[n-1].x;k++)
{
mx=k-no[j].x;
if(mx*dy%dx!=0 || mx*dz%dx!=0 || mx*dw%dx!=0) continue;
y=no[j].y+mx*dy/dx;
z=no[j].z+mx*dz/dx;
w=no[j].w+mx*dw/dx;
//cout<<k<<' '<<y<<' '<<z<<' '<<w<<endl;
if(y>40 || z>40 || w>40) continue;
if(node[k][y][z][w])
{
vis[j][node[k][y][z][w]]=1,sum++;
//cout<<k<<' '<<y<<' '<<z<<' '<<w<<endl;
}
}
ans=max(ans,sum);
}
}
printf("%d\n",ans);
return 0;
}