CodeForces - 268C(思维题)

Manao has invented a new mathematical term — a beautiful set of points. He calls a set of points on a plane beautiful if it meets the following conditions:

The coordinates of each point in the set are integers.
For any two points from the set, the distance between them is a non-integer.
Consider all points (x, y) which satisfy the inequations: 0 ≤ x ≤ n; 0 ≤ y ≤ m; x + y > 0. Choose their subset of maximum size such that it is also a beautiful set of points.

Input
The single line contains two space-separated integers n and m (1 ≤ n, m ≤ 100).

Output
In the first line print a single integer — the size k of the found beautiful set. In each of the next k lines print a pair of space-separated integers — the x- and y- coordinates, respectively, of a point from the set.

If there are several optimal solutions, you may print any of them.

Examples
Input
2 2
Output
3
0 1
1 2
2 0
Input
4 3
Output
4
0 3
2 1
3 0
4 2
Note
Consider the first sample. The distance between points (0, 1) and (1, 2) equals , between (0, 1) and (2, 0) —根号2, between (1, 2) and (2, 0) — 根号5. Thus, these points form a beautiful set. You cannot form a beautiful set with more than three points out of the given points. Note that this is not the only solution.

题目大意:给出x,y的范围,判断在这个范围内满足如下条件的点的数量最多的集合,并输出数量和集合中的每一个坐标。
条件一;两个点相加必须>0。
条件二:两个点的坐标必须是整数。
条件三:两个点的距离必须不是整数。

解题思路:这道题是思维题,要满足这三个条件,我们可以先min(x,y),求出比较小的一个,所求的点就是min+1,然后我们以比较小的为边长做正方形(长方形的坐标不一定是整数啊),因为要求最多的数量,肯定是要对角线啦…考虑到0,0这个点和条件一,我们取副对角线,从左上到右下即可。AC代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		int s=min(n,m);
		cout<<s+1<<endl;
		for(int i=0;i<=s;i++)
		  cout<<i<<" "<<s-i<<endl;
	}
	return 0;
}
posted @ 2020-03-15 22:49  Hayasaka  阅读(54)  评论(0编辑  收藏  举报