Почему только 9 из 22?
от work ip7 - Воскресенье 23 Март 2014, 20:22
2. Приближенный двоичный поиск
  #include <iostream>

using namespace std;

int main ()
{
int n, k;
long int nn[100001], kk[100001];
cin >> n >> k;
for(int i = 0; i < n; i++)cin >> nn[i];
for(int i = 0; i < k; i++)cin >> kk[i];



for(int ik = 0; ik < k; ik++)
{
for(int in = 0; in < n; in++)
{
if(abs(nn[in] - kk[ik]) > abs(nn[in+1] - kk[ik])) continue;
cout << nn[in] << endl;
break;
}

}
return 0;
}
Re: Почему только 9 из 22?
от Антон Карабанов - Воскресенье 23 Март 2014, 23:42
  Во-первых, задача на двоичный поиск, а не на перебор.

Во-вторых, сама реализация перебора сильно хромает.
Если в массиве nn стоят два одинаковых элемента подряд, то условие if(abs(nn[in] - kk[ik]) > abs(nn[in+1] - kk[ik])) continue; не выполнится, а значит перебор закончится, хотя до нужного элемента еще очень далеко.