3698 tomi
Tomi este primarul ales în orașul Bittown. În oras sunt N locuitori și fiecare are un gard format din exact 60 de scânduri, fiecare dintre ele fiind vopsită în alb sau negru. Fiecare gard este codificat de Tomi printr-un număr natural a cărui reprezentare binară reproduce configurația gardului, de la stânga spre dreapta, scândurile negre fiind asimilate cu bitul 1 iar cele albe cu bitul 0. Astfel, ca exemplu, gardul care are doar ultimele două scânduri vopsite în negru va fi codificat de Tomi cu numărul 3. Tomi decide să-și construiască un gard care să fie reprezentativ pentru Bittown, adică să respecte toate regulile următoare:
1. Gardul primarului Tomi trebuie să aibă exact 60 de scânduri;
2. Trebuie să existe cel puțin K locuitori în Bittown care constată că pentru toate scândurile negre din gardul propriu, scândurile situate pe aceeași poziție în gardul primarului Tomi sunt vopsite tot în negru;
3. Numărul reprezentând codul gardului primarului Tomi trebuie să fie minim posibil.
Date de intrare
Fișierul de intrare tomi.in conține pe prima linie doua numere naturale N și K. Pe cea de-a doua linie se află N numere, reprezentând codurile gardurilor locuitorilor din Bittown.
Date de ieșire
Fișierul de ieșire tomi.out va conține un singur număr reprezentand codul gardului construit de primarul Tomi.
Restricții și precizări
1 ≤ N ≤ 100.000
Fiecare cod este strict mai mic decât 260.
Pentru 19 puncte, toți copiii vor avea doar codurile 1, 2 sau 3.
Pentru alte 38 puncte, codurile copiilor vor mai mici decât 60.
Exemplu
tomi.in
6 3
1 1 5 8 10 8
tomi.out
5
Explicație
Răspunsul este 5 care are configurația în binar 101. Acesta este reprezentativ pentru codurile primelor trei garduri (1 1 5), pentru că le include configurațiile binare, respectând astfel regula 2.
printess199:
#3694
Răspunsuri la întrebare
Răspuns de
2
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> v;
int a=(1ll<<60) - 1ll, b, n, nr, k,x;
ifstream f ("tomi.in");
ofstream g ("tomi.out");
f >> n >> k;
for (int i = 1; i <= n; i++){
f>>x;
v.push_back(x);
}
for (int i = 59; i >= 0; i--){
b = a ^ (1ll<<i);
nr = 0;
for (int j = 1; j <= n; j++)
if ((v[j] | b) == b) nr++;
if (nr >= k)
a = b;
}
g << a << endl;
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Istorie,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă