_celsior edited 3 年,1 月前
前五组都是对的,第六组不知道为什么错了
#include <stdio.h>
int main()
{
int num=0,i,j,x,y,q=0;
int*cnt=&q;
int flag;
int ret=0;
scanf("%d",&num);
int a[num+1][num+1];
for(i=0;i<num;i++){
for(j=0;j<num;j++)
{
a[i][j]=0;
}
}
for(i=0;i<num;i++)//x方向
{
scanf("%d %d",&x,&y);
x=x-1;
y=y-1;
a[x][y]=1;
}
for(i=0;i<num;i++)
{
flag=0;
ret=ret+q*(q+1)/2;
*cnt=0;
for(j=0;j<num;j++)
{
if(a[i][j]==1&&flag==1)
{
*cnt=*cnt+1;
}
if(flag==0&&a[i][j]==1)
{
flag=1;
}
}
}
for(j=0;j<num;j++)//y方向
{
flag=0;
ret=ret+q*(q+1)/2;
*cnt=0;
for(i=0;i<num;i++)
{
if(a[i][j]==1&&flag==1)
{
*cnt=*cnt+1;
}
if(flag==0&&a[i][j]==1)
{
flag=1;
}
}
}
for(i=num-1;i>=0;i--)//↘上半区
{
flag=0;
ret=ret+q*(q+1)/2;
*cnt=0;
for(j=0;j<=num-i-1;j++)
{
if(a[j][i+j]==1&&flag==1)
{
*cnt=*cnt+1;
}
if(flag==0&&a[j][i+j]==1)
{
flag=1;
}
}
}
for(i=1;i<num;i++)//↘下半区
{
flag=0;
ret=ret+q*(q+1)/2;
*cnt=0;
for(j=0;j<=num-i-1;j++)
{
if(a[i+j][j]==1&&flag==1)
{
*cnt=*cnt+1;
}
if(flag==0&&a[i+j][j]==1)
{
flag=1;
}
}
}
for(i=0;i<num;i++)//↙上半区
{
flag=0;
ret=ret+q*(q+1)/2;
*cnt=0;
for(j=0;j<i+1;j++)
{
if(a[j][i-j]==1&&flag==1)
{
*cnt=*cnt+1;
}
if(flag==0&&a[j][i-j]==1)
{
flag=1;
}
}
}
for(i=1;i<num;i++)//↙下半区
{
flag=0;
ret=ret+q*(q+1)/2;
*cnt=0;
for(j=0;j<num-i;j++)
{
if(a[j][i+j]==1&&flag==1)
{
*cnt=*cnt+1;
}
if(flag==0&&a[j][i+j]==1)
{
flag=1;
}
}
}
printf("%d",ret);
return 0;
}