Soluție HackerRank pentru Manipulative Numbers. Include cerința formatată, exemple, explicația pașilor și cod sursă.
- Problemă: Manipulative Numbers
Cerinta completa
Suppose that [Expresie matematică indisponibilă în copia arhivată] is a list of [Expresie matematică indisponibilă în copia arhivată] numbers [Expresie matematică indisponibilă în copia arhivată] and [Expresie matematică indisponibilă în copia arhivată] is a permutation of these numbers, we say B is K-Manipulative if and only if:
[Expresie matematică indisponibilă în copia arhivată] is not less than [Expresie matematică indisponibilă în copia arhivată], where [Expresie matematică indisponibilă în copia arhivată] represents the XOR operator.
You are given [Expresie matematică indisponibilă în copia arhivată]. Find the largest [Expresie matematică indisponibilă în copia arhivată] such that there exists a K-manipulative permutation [Expresie matematică indisponibilă în copia arhivată].
Input:
The first line is an integer [Expresie matematică indisponibilă în copia arhivată]. The second line contains [Expresie matematică indisponibilă în copia arhivată] space separated integers – [Expresie matematică indisponibilă în copia arhivată].
Output:
The largest possible [Expresie matematică indisponibilă în copia arhivată], or [Expresie matematică indisponibilă în copia arhivată] if there is no solution.
Constraints:
- [Expresie matematică indisponibilă în copia arhivată]
- [Expresie matematică indisponibilă în copia arhivată]
Sample Input 0
3
13 3 10
Sample Output 0
2
Explanation 0
Here the list [Expresie matematică indisponibilă în copia arhivată] is [Expresie matematică indisponibilă în copia arhivată]. One possible permutation [Expresie matematică indisponibilă în copia arhivată]. Here [Expresie matematică indisponibilă în copia arhivată]
[Expresie matematică indisponibilă în copia arhivată].
So there exists a permutation [Expresie matematică indisponibilă în copia arhivată] of [Expresie matematică indisponibilă în copia arhivată] such that [Expresie matematică indisponibilă în copia arhivată] is not less than [Expresie matematică indisponibilă în copia arhivată]. However there does not exist any permutation [Expresie matematică indisponibilă în copia arhivată] of [Expresie matematică indisponibilă în copia arhivată] such that [Expresie matematică indisponibilă în copia arhivată] is not less than [Expresie matematică indisponibilă în copia arhivată]. So the maximum possible value of [Expresie matematică indisponibilă în copia arhivată] is [Expresie matematică indisponibilă în copia arhivată].
Sample Input 1
4
1 2 3 4
Sample Output 1
1
Explanation 1
Here the list [Expresie matematică indisponibilă în copia arhivată] is [Expresie matematică indisponibilă în copia arhivată]. One possible permutation [Expresie matematică indisponibilă în copia arhivată]. Here [Expresie matematică indisponibilă în copia arhivată]
[Expresie matematică indisponibilă în copia arhivată].
So there exists a permutation [Expresie matematică indisponibilă în copia arhivată] of [Expresie matematică indisponibilă în copia arhivată] such that [Expresie matematică indisponibilă în copia arhivată] is not less than [Expresie matematică indisponibilă în copia arhivată]. However there does not exist any permutation [Expresie matematică indisponibilă în copia arhivată] of [Expresie matematică indisponibilă în copia arhivată] such that [Expresie matematică indisponibilă în copia arhivată] is not less than [Expresie matematică indisponibilă în copia arhivată]. So the maximum possible value of [Expresie matematică indisponibilă în copia arhivată] is [Expresie matematică indisponibilă în copia arhivată].
Limbajul de programare folosit: cpp14
Cod:
// https://www.hackerrank.com/challenges/manipulative-numbers
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
unsigned a[111111], b[111111];
int n;
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 31; i >= 0; i--) {
for (int j = 0; j < n; j++)
b[j] = a[j] >> i;
sort(b, b + n);
unsigned x = b[0];
int cnt = 1, maxcnt = 1;
for (int j = 1; j < n; j++) {
if (b[j] == x) {
++cnt;
if (cnt > maxcnt) maxcnt = cnt;
} else {
cnt = 1;
x = b[j];
}
}
if (maxcnt <= n - maxcnt) {
cout << i << endl;
return 0;
}
}
cout << -1 << endl;
return 0;
}
Scor obtinut: 1.0
Submission ID: 464612971
Link challenge: https://www.hackerrank.com/challenges/manipulative-numbers/problem
