CF1027B Numbers on the Chessboard (#数学)

题目描述

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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值