Рассмотрим случай, когда число клеток по вертикали n четное. В этом случае каждая пара горизонталей доски содержит ровно m клеток (m - число клеток доски по горизонтали). Тогда общее число черных клеток равно m*n/2.
При нечетном n к рассмотренным горизонтальным строкам добавляется еще одна - нечетная, конфигурация которой совпадает с первой (нечетной) горизонталью.
Если клетка в левом нижнем углу первой горизонтали черная, то количество черных клеток в ней можно определить как сумму результата целочисленного деления количества клеток по горизонтали на два и остатка от этого деления. В результате приходим к следующей формуле:
\begin{lgathered}k=\begin {cases} \frac{mn}{2}, \ n \, mod \, 2=0 \\ \frac{m(n-1)}{2}+ (m \, div \, 2)+(m \, mod \, 2), \ n \, mod \, 2=1 \end {cases}\end{lgathered}
k={
2
mn
, nmod2=0
2
m(n−1)
+(mdiv2)+(mmod2), nmod2=1
Ниже представлен текст программы на языке Pascal.ABC.NET
var
m, n: integer;
begin
Write('Введите количество горизонталей на доске: ');
Readln(n);
Write('Введите количество вертикалей на доске: ');
Readln(m);
if (n mod 2) = 0 then Writeln('Черных клеток на доске- ', m * n / 2)
else Writeln('Черных клеток на доске- ', m * (n-1) / 2 + (m div 2) + (m mod 2))
#include <iostream>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
#pragma GCC optimize("Ofast")
#define ll long long
using namespace std;
ll digits(ll a){
if(a == 0)
return 1;
ll cnt = 0;
while(a > 0){
a /= 10;
cnt++;
}
return cnt;
}
int main() {
ll n;
cin >> n;
ll h = n/3600;
h %= 24;
n %= 3600;
ll m = n/60;
ll s = n % 60;
cout << h << ':';
if(digits(m) == 1)
cout << 0;
cout << m << ':';
if(digits(s) == 1)
cout << 0;
cout << s;
}
на информатиксе 100 :)
Объяснение:
Рассмотрим случай, когда число клеток по вертикали n четное. В этом случае каждая пара горизонталей доски содержит ровно m клеток (m - число клеток доски по горизонтали). Тогда общее число черных клеток равно m*n/2.
При нечетном n к рассмотренным горизонтальным строкам добавляется еще одна - нечетная, конфигурация которой совпадает с первой (нечетной) горизонталью.
Если клетка в левом нижнем углу первой горизонтали черная, то количество черных клеток в ней можно определить как сумму результата целочисленного деления количества клеток по горизонтали на два и остатка от этого деления. В результате приходим к следующей формуле:
\begin{lgathered}k=\begin {cases} \frac{mn}{2}, \ n \, mod \, 2=0 \\ \frac{m(n-1)}{2}+ (m \, div \, 2)+(m \, mod \, 2), \ n \, mod \, 2=1 \end {cases}\end{lgathered}
k={
2
mn
, nmod2=0
2
m(n−1)
+(mdiv2)+(mmod2), nmod2=1
Ниже представлен текст программы на языке Pascal.ABC.NET
var
m, n: integer;
begin
Write('Введите количество горизонталей на доске: ');
Readln(n);
Write('Введите количество вертикалей на доске: ');
Readln(m);
if (n mod 2) = 0 then Writeln('Черных клеток на доске- ', m * n / 2)
else Writeln('Черных клеток на доске- ', m * (n-1) / 2 + (m div 2) + (m mod 2))
end.
Тестовое решение:
Введите количество горизонталей на доске: 8
Введите количество вертикалей на доске: 7
Черных клеток на доске- 28