求助
查看原帖
求助
304722
HarryPotterJames楼主2021/8/15 12:06

思路应该是对的,为啥样例过不了?

#include<bits/stdc++.h>
using namespace std;
int min4(int a,int b,int c,int d)
{
	return min(min(a,b),min(c,d));
}
int main()
{
	int n,i,j;
	cin>>n>>i>>j;
	int uc=i-1,rc=n-j,dc=n-i,lc=j-1;
	int c=min4(uc,rc,dc,lc);
	int l=n-1;
   //c是所在圈前面的圈数
	//l所在圈的长度 
	int sum=c*l-c*(c-1);
	sum*=4;
	int x,y;
	x=y=c+1;
	l=l-2*c,sum++;
	int ans=0;
	for(int i=1;i<=l;i++)
	{
		if(i==x && j==y)
			ans=sum;
		sum++;
		y++;
	}
	for(int i=1;i<=l;i++)
	{
		if(i==x && j==y)
			ans=sum;
		sum++,x++;
	}
	for(int i=1;i<=l;i++)
	{
		if(i==x && j==y)
			ans=sum;
		sum++,y--;
	}
	for(int i=1;i<=l;i++)
	{
		if(i==x && j==y)
			ans=sum;
		sum++,x--;
	}
	if(n%2==1&&x==y&&x==n/2+1) ans=n*n;
	cout<<ans<<endl;
	return 0;
}
2021/8/15 12:06
加载中...