暴力算法之1080 两个数的平方和+1926 圈地运动

给出一个整数N,将N表示为2个整数i与j的平方之和(i <= j),如果有多种表示,按照i的递增序输出。

例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2(注:3^2 + 11^2同11^2 + 3^2算1种)

输入

一个数N(1 <= N <= 10^9)

输出

共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。
如果无法分解为2个数的平方和,则输出No Solution

输入样例

130

输出样例

3 11
7 9
#include <iostream>
#include <cmath>
using namespace std;

int n;

int main() {
    cin >> n;
    if (n == 0) {
        cout << "No Solution" << endl;
        return 0;
    }
    bool flag = true;
    for (int i = 0; i * i <= n / 2; ++i) {
        double j = sqrt(n - i * i);
        if (j == (int)j) {
            cout << i << ' ' << j << endl;
            flag = false;
        }
    }
    
    if (flag) {
        cout << "No Solution" << endl;
    }
    
    return 0;
}
View Code

平面上有n个金矿点。现在可以选择一块边长为L的正方形的土地,四边要求和坐标轴平行。请计算一下最多有多少金矿落在(在边界上也算)所选择的土地中。

已知1 <= n <= 100,1 <= L<= 100000,每个金矿的坐标(x,y)满足-100000<=x,y<= 100000。

输入

第一行输入两个整数n和L。
接下来n行,每行两个整数x和y,表示一个金矿的坐标。

输出

输出一个整数表示答案。

输入样例

3 1 
1 2 
2 1 
4 3

输出样例

2
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct node {
    int x, y;
};
node a[110];
int n, L;

vector<int> X, Y;

int main() {
    cin >> n >> L;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i].x >> a[i].y;
    }
    
    for (int i = 1; i <= n; ++i) {
        X.push_back(a[i].x);
        X.push_back(a[i].x - L);
        Y.push_back(a[i].y);
        Y.push_back(a[i].y - L);
    }
    
    int ans = 0;
    for (int i = 0; i < X.size(); ++i) {
        for (int j = 0; j < Y.size(); ++j) {
            int cnt = 0;
            int lx = X[i], ly = Y[j];
            for (int k = 1; k <= n; ++k) {
                if (a[k].x>=lx && a[k].x<=lx+L && a[k].y>=ly && a[k].y<=ly+L) {
                    cnt++;
                }
            }
            ans = max(ans, cnt);
        }
    }
    
    cout << ans << endl;
    
    return 0;
}
View Code

 

 

posted @ 2021-06-21 15:29  tianluman  阅读(134)  评论(0编辑  收藏  举报