1 solutions
-
0
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