Maraqlı hasil#916

Maraqlı hasil (Həll təhlili)

Məlumatların saxlanılması üçün map<int, int> m strukturunu müəyyən edək, bu struktur i \cdot j hasilatının neçə dəfə təkrarlanmasını sayacaq. Unikal hasilatların sayı xəritəsinin ölçüsünə bərabərdir.

Nümunə

İkinci nümunəni nəzərdən keçirək. [2; 4] \times [2; 5] matrisa üçün vurma cədvəlini yazaq.

Cədvəldə fərqli qiymət var.

Alqoritmin reallaşdırılması

Məlumatların saxlanılması üçün strukturu müəyyən edək.

map<int, int> m;

Giriş məlumatlarını oxuyuruq.

scanf("%d %d %d %d",&a,&b,&c,&d);

və , həmçinin və dəyişənlərini yerlərini dəyişək ki, a \le b, c \le d şərtləri yerinə yetirilsin.

if (a > b) swap(a,b);
if (c > d) swap(c,d);

Bütün mümkün i \cdot j hasilatlarını yoxlayırıq. Hər bir hasilat üçün xəritədə i \cdot j açarına bağlı olan dəyəri artırırıq.

for(i = a; i <= b; i++)
for(j = c; j <= d; j++) 
  m[i*j]++;

Cavabı çıxışa yazırıq — xəritənin ölçüsünü.

printf("%d\n",m.size());

Java reallaşdırılması

import java.util.*;

public class Main
{
  public static void main(String[] args) 
  {
    Scanner con = new Scanner(System.in);

Giriş məlumatlarını oxuyuruq.

    int a = con.nextInt();
    int b = con.nextInt();
    int c = con.nextInt();
    int d = con.nextInt();

və , həmçinin və dəyişənlərini yerlərini dəyişək ki, a \le b, c \le d şərtləri yerinə yetirilsin.

    if (a > b) {int temp = a; a = b; b = temp;}
    if (c > d) {int temp = c; c = d; d = temp;}

Məlumatların saxlanılması üçün strukturu müəyyən edək.

    Map<Integer,Integer> m = new HashMap<Integer,Integer>();

Bütün mümkün i \cdot j hasilatlarını yoxlayırıq.

    for(int i = a; i <= b; i++)
    for(int j = c; j <= d; j++)
    {
      int key = i * j;

Açarla bağlı olan dəyəri artırırıq. Əgər açarla dəyəri hələ bağlı deyilsə, onu standart olaraq qəbul edirik.

      m.put(key, m.getOrDefault(key, 0) + 1);
    }

Cavabı çıxışa yazırıq — xəritənin ölçüsünü.

    System.out.println(m.size());
    con.close();
  }
}

Python reallaşdırılması

Giriş məlumatlarını oxuyuruq.

a, b, c, d = map(int, input().split())

Məlumatların saxlanılması üçün lüğəti müəyyən edək.

m = {}

və , həmçinin və dəyişənlərini yerlərini dəyişək ki, a \le b, c \le d şərtləri yerinə yetirilsin.

if a > b:
  a, b = b, a
if c > d:
  c, d = d, c

Bütün mümkün i \cdot j hasilatlarını yoxlayırıq. Hər bir hasilat üçün lüğətdə i \cdot j açarına bağlı olan dəyəri artırırıq.

for i in range(a, b+1):
  for j in range(c, d+1):
    key = i * j
    m[key] = m.get(key, 0) + 1

Cavabı çıxışa yazırıq — lüğətin ölçüsünü.

print(len(m))