1 solutions

  • 0
    @ 2025-12-3 8:44:14

    C++ :

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    long long n;
    long long x;
    
    int main(){
    	scanf("%lld%lld",&n,&x);
    	if(x==1){
    		printf("%lld",(n+1)/2*n+(n+1)/2);
    		return 0;
    	}
    	long long i,j;//i表示所在圈的边长,j是倒数第几圈 
    	for(i=3,j=2;i<=n;i+=2,j++)//求出在第几圈
    		if(i*i>=x) break;
    	long long _start=(i-2)*(i-2)+1;
    	j=(n+1)/2-j+1;//正数第几圈 
    	//分四条边 
    	if(x<_start+i) printf("%lld", j*n + j+(x-_start) );
    	else if(x<_start+i-1+i) printf("%lld", (j+x-_start-i+1)*n + (j+i-1) );
    	else if(x<_start+i-1+i-1+i) printf("%lld", (j+i-1)*n + j+i-1-(x-(_start+i-1+i-1)) );
    	else printf("%lld", (j+i-1-(x-(_start+i-1+i-1+i-1)))*n + j );
    	
    	
    	return 0;
    }
    
    • 1

    Information

    ID
    784
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    1
    Accepted
    1
    Uploaded By