JAPLJ Contest A: Anemone

問題
http://judge.imoz.jp/page.php?page=view_problem&pid=42&cid=8
回答(1回目) - Wrong Answer - 30% Scored
適当すぎていろいろと根本的におかしかった
回答(2回目) - Wrong Answer - 30% Scored
コーナーケースでした
回答(3回目) - Accepted

#include <cstdio>
#include <vector>
using namespace std;

pair<int,double> func(long long p) {
    if (p == 0) return make_pair(1, 2);
    long long a = 1;
    for (int i = 1; i < 32; ++ i, a <<= 1) {
        if (p == a+1) return make_pair(i, 0);
        if (p == 2*a) return make_pair(i, 0.5);
        if (p == a) return make_pair(i, 1);
    }
    return make_pair(-1, 0);
}

int main() {
    int p;
    scanf("%d", &p);
    pair<int,double> r = func(p);
    if (r.first >= 0) {
        printf("%d %.1f\n", r.first, r.second);
    } else {
        puts("-1");
    }
}