Форум » Массивы, сортировка, работа с файлами » Другой ответ в №3766(А.Кабанов) » Ответить

Другой ответ в №3766(А.Кабанов)

inform_lesson: Добрый день. При ответе на первый вопрос задачи 3766 получается другой ответ. В чём ошибка ? [pre2] const n = 5000; var m: array[1..n] of integer; i, j, srpar, min, k1, k2, z, a, p: integer; begin assign(input, '26.txt'); for i := 1 to n do begin readln(a); m[ i] := a; end; for i := 1 to n - 1 do for j := i + 1 to n do begin if (m[ i] + m[ j]) mod 2 = 0 then begin srpar := (m[ i] + m[ j]) div 2; for p := 1 to n do if (m[ p] < srpar) then inc(k1) else inc(k2); end; if (k1 >= 2500) and (k2 >= n div 4) then inc(z); end; write(z); end. [/pre2]

Ответов - 4

cabanov.alexey: 1) Неоптимизированный алгоритм, вы никак не сортируете и не используете факт сортировки. 2) Куча детских ошибок Поправил как мог [pre2]var m: array of integer; i, j, srpar, min, k1, k2, z, a, p, n: integer; begin assign(input, '26-50.txt'); readln(n); setLength(m,n); for i := 0 to n-1 do readln(m[ i]); for i := 0 to n - 2 do begin println(i); for j := i + 1 to n-1 do begin if (m[ i] + m[ j]) mod 2 = 0 then begin srpar := (m[ i] + m[ j]) div 2; k1:=0; k2:=0; for p := 0 to n-1 do begin if (m[ p] < srpar) then inc(k1); if (m[ p] > srpar) then inc(k2); end; if (k1 >= n div 2) and (k2 >= n div 4) then inc(z); end; end; end; write(z); end. [/pre2]

kondaevnil: [pre2] #include <iostream> #include <fstream> #include <vector> #include <algorithm> using namespace std; int main() { ifstream f("26-50.txt"); int n, cnt = 0, m = 10000000000; f >> n; vector<int> v(n); int half = n / 2, quat = n / 4; for (auto &i: v) f >> i; sort(v.begin(), v.end()); for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) { if ((v[ i] + v[j]) % 2 == 1) continue; int mid = (v[ i] + v[j]) / 2; if (v[half-1] < mid && v[n-quat] > mid) { cnt++; m = min(m, mid); } } cout << cnt << " " << m << endl; return 30; } [/pre2]

kondaevnil: странно, что сьело пробелы..


inform_lesson: Спасибо, Алексей



полная версия страницы