Yay#10836

Yay (Həll təhlili)

Hər bir oyunçu üçün onların sonuncu atış vaxtı haqqında məlumat saxlayacağıq. Məsələn, prevTime[i] massivində oyunçu öz sonuncu atışını etdiyi vaxtı (saniyələrlə) yazacağıq.

Daha sonra bütün atışları ardıcıl işlədirik. Hazırkı atışı (t, a, b) üçlüyü tərəfindən təmsil edilsin. Onda:

Misal

Birinci nümunədə və -ci saniyələrdə oyunçu əks komandanın oyunçuları olan və -yə atış edir. Hər atış üçün "Ananas" komandası xal qazanır. Çünki hər iki atışlar saniyə fərqi ilə edilərək əlavə xal qazanılır. Ümumilikdə: 250 = 2 × 100 + 50. "Çernika" komandası yalnız bir atış edib və xal qazanıb.

İkinci nümunədə oyunçu ardıcıl iki cüt atış edib, belə ki, "Ananas" komandası cəmi 3 × 100 + 2 × 50 = 400 xal qazanıb.

Alqoritmin reallaşdırılması

prevTime[i]-də oyunçu öz sonuncu atışını etdiyi vaxtı (saniyələrlə) saxlayacağıq.

int prevTime[10];

Atışların sayını oxuyuruq.

scanf("%d", &n);

Hər bir oyunçu üçün sonuncu atış vaxtının başlanğıc dəyərini kimi təyin edirik.

for (i = 1; i < 10; i++)
  prevTime[i] = -10000;

"Ananas" və "Çernika" komandalarının xallarını müvafiq olaraq və dəyişənlərində saxlayacağıq.

pa = pb = 0;

Bütün atışları işlədirik.

while (n--)
{

Oyunçu oyunçusuna vaxt -da atış edir.

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

Oyunçu -nın aid olduğu komanda xal qazanır.

  if (a < b) pa += 100;
  else pb += 100;

Əgər oyunçu öz əvvəlki atışından saniyə ərzində atış edirsə, onun komandası əlavə xal qazanır.

  if (t - prevTime[a] <= 10)
    if (a < b) pa += 50;
    else pb += 50;

Bundan sonra oyunçu -nın vaxtında atış etdiyini yeniləyirik.

  prevTime[a] = t;
}

Cavabı çıxışa yazırıq.

printf("%d %d\n", pa, pb);