题目描述
You are given a chessboard of size n \times nn×n . It is filled with numbers from 11 to n^2n2 in the following way: the first \lceil \frac{n^2}{2} \rceil⌈2n2⌉ numbers from 11 to \lceil \frac{n^2}{2} \rceil⌈2n2⌉ are written in the cells with even sum of coordinates from left to right from top to bottom. The rest n^2 - \lceil \frac{n^2}{2} \rceiln2−⌈2n2⌉ numbers from \lceil \frac{n^2}{2} \rceil + 1⌈2n2⌉+1 to n^2n2 are written in the cells with odd sum of coordinates from left to right from top to bottom. The operation \lceil\frac{x}{y}\rceil⌈yx⌉ means division xx by yyrounded up.
For example, the left board on the following picture is the chessboard which is given for n=4n=4 and the right board is the chessboard which is given for n=5n=5 .
You are given qq queries. The ii -th query is described as a pair x_i, y_ixi,yi . The answer to the ii -th query is the number written in the cell x_i, y_ixi,yi ( x_ixi is the row, y_iyi is the column). Rows and columns are numbered from 11 to nn .
输入输出格式
输入格式:
The first line contains two integers nn and qq ( 1 \le n \le 10^91≤n≤109 , 1 \le q \le 10^51≤q≤105 ) — the size of the board and the number of queries.
The next qq lines contain two integers each. The ii -th line contains two integers x_i, y_ixi,yi ( 1 \le x_i, y_i \le n1≤xi,yi≤n ) — description of the ii -th query.
输出格式:
For eachuery from 11 to qq print the answer to this query. The answer to the ii -th query is the number written in the cell x_i, y_ixi,yi ( x_ixi is the row, y_iyi is the column). Rows and columns are numbered from 11 to nn . Queries are numbered from 1 to q in order of the input.
输入输出样例
输入样例#1
4 5 1 1 4 4 4 3 3 2 2 4
输出样例#1
1 8 16 13 4
输入样例#2
5 4 2 1 4 2 3 3 3 4
输出样例#2
16 9 7 20
说明
Answers to the queries from examples are on the board in the picture from the problem statement.
思路
非常难搞的数学题......CF B题都那么难的么?
大意是按题目中的图填数,输入x,y代表图中的坐标,输出(x,y)的数值。
第一轮填数的横纵坐标和为偶数,第二轮填数的横纵坐标和为奇数。找规律可得数值与坐标的关系是(x-1)*n+(y+1)。
第二轮只要加上(n*n)就好了。
答案最后别忘了除以2,因为第一轮和第二轮我们是分情况讨论的。
#include <stdio.h>
#include <iostream>
using namespace std;
long long int n,t,s;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>t;
while(t--)
{
int x,y;
s=0;
cin>>x>>y;
s=(x-1)*n+y+1;
if((x+y)%2)
{
s+=n*n;
}
cout<<s/2<<endl;
}
return 0;
}