P1665正方形计数 求助
查看原帖
P1665正方形计数 求助
377760
Reunite楼主2021/10/20 01:00

本来以为是道水题的结果改了好久都没过www

思路自认为挺清晰的呀,求助一下(WA了5个点)

#include <cstdio>
using namespace std;

int n;
int x[505],y[505];
bool mp[500][500];

int ab(int a){return a<0?-a:a;}

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&x[i],&y[i]);
        x[i]+=100,y[i]+=100;//偏移
        mp[x[i]][y[i]]=true;
    }
    int s1=0,s2=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==j) continue;
            if(x[i]<x[j]&&y[i]<y[j]){
                int qq=ab(x[i]-x[j]);
                int ww=ab(y[i]-y[j]);
                int sx=x[i]-ww,sy=y[i]-qq;
                int xx=sx+qq,yy=sy+ww;
                if(sx<0||sy<0||xx<0||yy<0) continue;//判断倾斜的正方形
                if(mp[sx][sy]&&mp[xx][yy]) s1++;
            }
            if(x[i]==x[j]){
                int qq=ab(y[i]-y[j]);
                int sx=x[i]+qq,sy=y[i];
                int xx=sx,yy=y[j];
                if(sx<0||sy<0||xx<0||yy<0) continue;//判断正的正方形
                if(mp[sx][sy]&&mp[xx][yy]) s2++;
            }
        }
    }
    printf("%d",s1+s2/2);

    return 0;
}
2021/10/20 01:00
加载中...