2016-03-27 4 views
1

Нам нужно найти упорядоченные пары (a, b).Два положительных целых числа 'a' и 'b' имеют сумму 's' и побитовое XOR 'x'. Сколько возможных значений для упорядоченной пары (a, b)?

(2 < = S < = 10^12) и (0 < = х < = 10^12)

Например -

S = 9 х = 5 Мы имеем число упорядоченных пары = 4 {(2,7), (7,2) (3,6) (6,3)}

Может кто-нибудь, пожалуйста, предоставьте мне способ решить этот вопрос !!!

+0

Заметим, что A + B = 2 * (а & б) + (a^b) = 2 * (a | b) - (a^b), по определению вычислений суммированных бит и бит-бит в суммировании. – njuffa

+0

Конкурсный вопрос ([Перекрестная ссылка] (http://codeforces.com/problemset/problem/627/A)) – njuffa

+0

Спасибо @njuffaa, на самом деле я знаю это определение. Я застрял после этого. Если вы знаете, как решить, можете ли вы объяснить шаги. – user3111412

ответ

2

Вот логика пусть чисел быть и Ь, мы знаем

s = a + b 
x = a^b 

поэтому

x = (s-b)^b 

Так как мы знаем, х, и мы знаем, с, так что для всех Интс происходит от 0 s - просто проверьте, удовлетворено ли это последнее уравнение.

вот код для этого

public List<Pair<Integer>> pairs(int s, int x) { 
    List<Pair<Integer>> pairs = new ArrayList<Pair<Integer>>(); 
    for (int i = 0; i <= s/2; i++) { 
     int calc = (s - i)^i; 
     if (calc == x) { 
      pairs.add(new Pair<Integer>(i, s - i)); 
      pairs.add(new Pair<Integer>(s - i, i)); 
     } 
    } 
    return pairs; 
} 

пары Класс определяется как

class Pair<T> { 
    T a; 
    T b; 

    public String toString() { 
     return a.toString() + "," + b.toString(); 
    } 

    public Pair(T a, T b) { 
     this.a = a; 
     this.b = b; 
    } 
} 

кодекса, чтобы проверить это:

public static void main(String[] args) { 
    List<Pair<Integer>> pairs = new Test().pairs(9,5); 
    for (Pair<Integer> p : pairs) { 
     System.out.println(p); 
    } 
} 

Выход:

2,7 
7,2 
3,6 
6,3 
+0

Спасибо @abhaybhatia, но не вы думаю, что потребуется много времени, когда «будет» 10^12. Поскольку мы запускаем цикл целиком от 1 до s/2. – user3111412

 Смежные вопросы

  • Нет связанных вопросов^_^