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:
oyunçu -nın komandasına atış etdikdə xal verilir;
əgər oyunçu cüt atış (şərt t - prevTime[a] \le 10 yerinə yetirilir) edirsə, onun komandasına əlavə xal verilir;
bundan sonra prevTime[a] = t dəyərini yeniləyirik, çünki oyunçu öz sonuncu atışını vaxtında etdi.
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);