【题解】【AcWing】3455. 数字台阶

114 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

3455. 数字台阶

原题传送:AcWing 3455. 数字台阶

如下图所示,我们在一个平面上建立了一个数字台阶,从点 (0,0)(0,0) 开始,我们在平面中依次标注了 0,1,20,1,2… 等所有非负整数。

例如,在点 (1,1),(2,0),(3,1)(1,1),(2,0),(3,1) 处,我们依次标注了 1,2,31,2,3

现在,给定一个若干坐标,请你判断,该坐标上是否标有数字,以及标有什么数字。

输入格式

第一行包含整数 NN 。表示询问坐标数量。

接下来 NN 行,每行包含两个整数 x,yx,y ,表示询问坐标为 (x,y)(x,y)

输出格式

对于每个询问,输出一行结果。

如果询问坐标上存在数字,则输出该数字,否则输出 No Number

数据范围

1N200001 \le N \le 20000 , 0x,y50000 \le x,y \le 5000

输入样例:

3
4 2
6 6
3 4

输出样例:

6
12
No Number

思路:

找规律,所有合法的点在两条直线上。

题解:

#include <bits/stdc++.h>

using namespace std;

int f(int x, int y)
{
	if(x % 2 == 0 && y % 2 == 0 && (x == y || x == y + 2)) return x + y;
	else if(x % 2 && y % 2 && (x == y || x == y + 2)) return x + y - 1;
	else return -1;
}

int main()
{
	int T;
	cin >> T;
	
	while(T--)
	{
		int x, y;
		cin >> x >> y;
		
		int res = f(x, y);
		
		if(res == -1) cout << "No Number" << endl;
		else cout << res << endl;
	}

	return 0;
}