题意有点坑 开始就是觉得是求存在多少个以图中点为顶点的正多边形(3到6) 结果编好后他补充了了一句 最后形成的轨迹 边上不能有点 让我误以为 有的大的正多边形就不算了 后来仔细揣摩了一下才明白 原题中是说了 若两种跑法经过的座椅集合相同则认为是一种跑法 所以综合起来 还是最开始理解的那样
对于题中所说的正多边形 可以发现 只有4边形可以由整数点构成 简单证明下 如果正3角形的边长为整数k 则高为根号3k 不是整数 就无法由整数点构成 发现了这个规律就很简单了
找正方形的话 由于存在一些斜着的 所以每个点 暴力找出它左下的 点 推出剩下的点的位置来验证 这样不重不漏 编起来也好编 由于数据小 可以把点放进2维数组里 方便操作
比赛时 很早就发现了 然后就很开心的去找正方形 结果忘了 正方形可以斜着放 wa了之后 想半天也没想到 只能去做C 回来再做B的时候 题面加了补充 再题意上纠结了一会之后才发现这个bug (>﹏<)
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include<set>
#include<stack>
#define bug puts("bugbugbug");
using namespace std;
typedef long long ll;
int a[50][50];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
for(int i=0; i<n; i++)
{
int x,y;
scanf("%d%d",&x,&y);
a[x][y]=1;
}
int ans=0;
for(int i=0; i<=8; i++)
for(int j=0; j<=8; j++)
if(a[i][j]){
for(int ii=i; ii<=8; ii++)
for(int jj=0; jj<j; jj++)
if(a[ii][jj])
{
int cc=j-jj;
int dd=ii-i;
if(a[ii+cc][jj+dd]&&a[i+cc][j+dd])
ans++;
}
}
printf("%d\n",ans);
}
}