题目描述
把数1,2,3,4,5,…,N*N按照“蛇形3”放入N*N矩阵的中,然后有M个询问,每个询问为:
请计算第x行第y列的数是什么?
下面是N=6的蛇形3的图示
输入格式
第一行2个正整数:N,M,范围在[1,100000]。
下面有M行,每行2个整数,范围在[1,N]。
输出格式
M行,第i行是第i个询问的结果。
输入/输出例子1
输入:
6 4
1 1
2 2
4 3
3 2
输出:
1
21
36
32
编程语言
C++
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++)
{
ll x,y;
cin>>x>>y;
ll k=min(min(x,n+1-x),min(y,n+1-y));
ll knum=n-2*(k-1);
ll ks=n*n-knum*knum+1;
ll ans=0;
if(x==k)
ans=ks+y-k;
else if(y==n-k+1)
ans=ks+knum-1+x-k;
else if(x==n-k+1)
ans=ks+2*(knum-1)+n+1-k-y;
else
ans=ks+3*(knum-1)+n+1-k-x;
cout<<ans<<endl;
}
return 0;
}