2013国内予選 A. 整長方形

A. 整長方形

解法

  • A問題だし、男は黙って全探索という感じでやってみた
    • 答えの高さと幅は150を超えないので、あり得る答えを全通り試しても余裕
  • 全列挙→ソート→upperbound もアリ
#include <iostream>

using namespace std;

int main(){
    int h, w;
    while(cin >> h >> w && h){
        int area = h*h+w*w;
        int resH = 200, resW = 200, resArea = 10000000;
        for(int i=1;i<=150;i++){
            for(int j=i+1;j<=150;j++){
                int newArea = i*i+j*j;
                if(area > newArea || (area == newArea && i <= h)) continue;
                if(newArea < resArea || (newArea == resArea && i < resH)){
                    resH = i;
                    resW = j;
                    resArea = newArea;
                }
            }
        }
        cout << resH << " " << resW << endl;
    }
}