Arithmetic Progressions

本题纯属水题,一看5s的时限就直接暴力。1Y!

/*
ID: like_091
PROG: ariprog
LANG: C++
*/
#include<iostream>
#include<cmath>
#include<fstream>
using namespace std;
const int MAX = 250;
int d[MAX * MAX * 2 + 1], tem;
struct Node{
	int x, y;
}node[10001];
int cmp(const void *a, const void *b)
{
	Node *c = (Node *)a;
	Node *d = (Node *)b;
	if (c->y == d->y)
		return c->x - d->x;
	return c->y - d->y;
}
void fun(int m)
{
	for (int i = 0; i <= m; i++)
		for (int j = 0; j <= m; j++)
			d[i * i + j * j] = 1;
}
void enqueue(int a, int b)
{
	node[tem].x = a;
	node[tem++].y = b;
}
int main()
{
	ifstream cin("ariprog.in");
	ofstream cout("ariprog.out");
	int m, n, len;
	cin>>n>>m;
	len = (int)sqrt(m * m * 2.0);
	for (int i = 0; i <= m * m * 2; i++)
		d[i] = 0;
	fun(m);
	tem = 0;
	for (int i = 0; i <= m * m * 2; i++)
		if (d[i])
		{
			bool flag = true;
			for (int j = 1; j <= (m * m * 2 - i) / (n - 1); j++)
			{
				bool flag = true;
				for (int k = 1; k < n; k++)
					if (!d[k * j + i])
					{
						flag = false;
						break;
					}
				if (flag)
					enqueue(i, j);
			}
		}
	qsort(node, tem, sizeof(node[0]), cmp);
	if (!tem)cout<<"NONE"<<endl;
	for (int i = 0; i < tem; i++)
		cout<<node[i].x<<" "<<node[i].y<<endl;
	return 0;
}
posted @ 2011-02-23 22:45  like@neu  阅读(196)  评论(0编辑  收藏  举报