1. 程式人生 > 其它 >暴力演算法之1080 兩個數的平方和+1926 圈地運動

暴力演算法之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