Tostlar#510

Tostlar (Həll təhlili)

Əgər n = 0 olarsa, cavab -dır.

Əgər tostların sayı tavaların tutumundan çox deyilsə k~(n \le k), bütün tostları hər iki tərəfdən qızartmaq üçün dəqiqə tələb olunur.

Hər tost hər iki tərəfdən qızardılmalıdırsa, ümumilikdə qızartma lazımdır. Hər qızartma (tavaya eyni anda tost yerləşdirə bilmək) dəqiqə davam edir.

Nəticə etibarilə, əgər n > k olarsa, bütün tostları qızartmaq üçün minimal vaxt 2 \cdot \lceil 2n / k \rceil dəqiqəyə bərabərdir.

Nümunə

Tutaq ki, n = 3 tost var və tava eyni anda k = 2 tost yerləşdirə bilir. Tostların tərəflərini 1a, 1b, 2a, 2b, 3a, 3b kimi ifadə edək.

Beləliklə bütün tərəfi dəqiqədə qızartmaq mümkündür:

Cəmi: qızartma hər biri dəqiqədən, yəni dəqiqə.

Alqoritmin reallaşdırılması

Giriş məlumatlarını oxuyuruq.

scanf("%d %d",&n,&k);

Əgər n = 0 olarsa, cavab -dır.

if (!n) res = 0; else

Əgər tostların sayı tavaların tutumundan çox deyilsə, onları qızartmaq üçün dəqiqə lazımdır.

if (n <= k) res = 4; else
{

Hər tost hər iki tərəfdən qızardılmalıdır, yəni ümumilikdə tərəf qızardılmalıdır. Bir qızartma (tavada yerləşdirilə bilən tostların sayından asılı olmayaraq) dəqiqə davam edir.

  res = 2 * n / k;
  if (2 * n % k) res++;
  res *= 2;
}

Cavabı çap edirik.

printf("%d\n",res);

Java da reallaşdırma

import java.util.*;

public class Main
{
  public static void main(String []args)
  {
    Scanner con = new Scanner(System.in);
    int n = con.nextInt();
    int k = con.nextInt();
    int res;
  
    if (n == 0) res = 0; else    
    if (n <= k) res = 4; else
    {
      res = 2 * n / k;
      if (2 * n % k > 0) res++;
      res *= 2;
    }        
    System.out.println(res);
    con.close();
  }
}