#include #define PRVOCISLO 1000000007 // Deinujeme ještě makro, které nám bude vracet minimum z dvou čísel #define MIN(X, Y) ((X) < (Y) ? X : Y) typedef long long int ll; int main() { ll prvni_x, prvni_y, druhy_x, druhy_y; scanf("%lld%lld%lld%lld", &prvni_x, &prvni_y, &druhy_x, &druhy_y); ll uvnitr_a_pred, pred, uvnitr; ll vysledek = 0; // Výraz "prvni_x | 1" je bitový or s jedničkou a vrací nám prvni_x, pokud // je prvni_x liché, jinak prvni_x + 1 for (ll i = prvni_x | 1; i <= druhy_x; i += 2) { // Procházíme pravé strany uvnitr_a_pred = MIN(i, druhy_y); pred = MIN(i, prvni_y - 1); uvnitr = uvnitr_a_pred - pred; vysledek += uvnitr; vysledek %= PRVOCISLO; } for (ll i = prvni_y | 1; i <= druhy_y; i += 2) { // Procházíme horí strany uvnitr_a_pred = MIN(i + 1, druhy_x); // Tetokrát započíáme diagonálu pred = MIN(i + 1, prvni_x - 1); uvnitr = uvnitr_a_pred - pred; vysledek += uvnitr; vysledek %= PRVOCISLO; } printf("%lld\n", vysledek); return 0; }