A. Перестроение
ограничение по времени на тест: 1 секунда
ограничение по памяти на тест :256 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Солдаты выстроились на плацу в виде прямоугольника из M шеренг по N человек в шеренге: за первой шеренгой – вторая, за второй – третья и т.д.
Потом все шеренги выстроились в одну длинную шеренгу по порядку – первая шеренга, вторая, третья и т.д.
Затем эту длинную шеренгу разбили на K шеренг равной длины и снова построили в виде прямоугольника.
Требуется узнать, в какой шеренге и каким по счёту в этой шеренге оказался после перестроения солдат, который до перестроения был j-м по счёту в i-й шеренге.
Входные данные
В единственной строке входного файла записаны натуральные числа M, N, K, i, j, разделённые пробелом (1≤i≤M≤106,1≤j≤N≤106,1≤K≤109).
Выходные данные
В единственной строке выходного файла должны быть записаны два натуральных числа, разделённые пробелом, - номер шеренги, в которой оказался солдат после перестроения, и его порядковый номер в этой шеренге.
Нумерация шеренг и солдат в шеренге идет с 1.
Пример
входные данные
3 4 2 2 3
выходные данные
2 1
using namespace std;
int main() {
int mat[3][3];
int k;
int size=0;
int * arr=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
cin>>mat[i][j];
if (mat[i][j]>0){
arr=(int*)realloc(arr,sizeof(int)*(++size));
arr[size-1]=mat[i][j];
}
}
}
for(int i=0;i<size;i++){
cout<<arr[i];
}
delete arr;
cin.get();
cin.get();
return 0;
}
При использовании двоичной арифметики приходится сталкиваться с тем, что большинство нецелых чисел невозможно точно представить в двоичной системе, как нельзя, например, в десятичной системе точно представить в виде десятичной дроби число 1/3 = 0.333
Рассмотрим пример. Если в простых дробях (1/3) х 3 = 1, то в десятичных 0.3333 х 3 = 0.9999.
В двоичной машинной арифметике происходит аналогичная ситуация. Но если человек сознает, что результат 0.9999... - та же единица, то компьютер этого не понимает. В результате в компьютерной арифметике (1 / 3) х 3 не равняется единице.
Еще пример. Пусть нам надо вычислить значение функции в точках от -2π до 2π с шагом π/6. Человек будет использовать значения -2π, -11π/6, -10π/6 и т.д. пока не придет к точке 2π. Компьютер (в арифметике с обычной точностью) вычислит значение -2π как -6.283185, а шаг представит значением 0.5235988. Это приведет к тому, что когда мы придем к нулю, то получим значение аргумента -9.536743х10⁻⁷, а в конечной точке получим аргумент 6.283184, который по абсолютной величине отличается от начального на единицу в младшей цифре, т.е. для компьютера при таком последовательном счете |-2π| ≠ 2π.
Третий пример. отрицательные целые числа представляются в компьютере в дополнительном коде, когда старший разряд является знаковым: 0 - это плюс, 1 - это минус.
Пусть мы прибавляем к 127 единицу в арифметике целых чисел, которым в двоичном представлении отведен один байт:
1111111₂ + 1₂ = 10000000₂ - тут все понятно, единичка перешла в старший, восьмой разряд. Но ведь он ЗНАКОВЫЙ! И вместо двоичного эквивалента 128 в компьютерной арифметике мы получаем отрицательное число! Причем, что самое интересное, из соображений эффективности эта ситуация обычно аппаратно не контролируется и в результате программы могут вести себя очень странно.