Hərflər üzrə tullanma (RIO_M2014)
Məsələ #: 183
Latın əlifbasının baş hərflərindən təşkil olunmuş N sayda simvollar zənciri verilmişdir. Ən çoxuK simvol tullanmaqla zəncirin birinci simvolundan axırıncı simvolunadək getmək lazımdır. Tullanma nəticəsində simvol dəyişmirsə, yəni əvvəlki ilə eyni olan hərfin üzərinə tullanılırsa, belə tullanmanın qiyməti 0-a, başqa simvolun üzərinə tullanılırsa, qiyməti 1-ə bərabər olur.
Birinci simvoldan axırıncı simvola çatmaq üçün qiyməti ən az olan keçidi hesablayan proqram yazın.
Giriş verilənlərinin formatı
Birinci sətirində iki tam ədəd verilir: simvollar zəncirinin uzunluğu – N (2 ≤ N ≤ 105) və maksimal tullanma uzunluğu – K (1 ≤ K < N). İkinci sətirdə N sayda hərfdən ibarət zəncir yerləşir.
Çıxış verilənlərinin formatı
Çıxışa bir ədəd – yerdəyişmənin minimum qiyməti verilir.
Məlumat
Zaman limiti: 2 san.
Yaddaş limiti: 64 Mb
Bal: 10
Çətinlik: 31/95 (67 %)
Yaddaş limiti: 64 Mb
Bal: 10
Çətinlik: 31/95 (67 %)
Nümunə
Giriş verilənlərinə nümunə
10 2 ABABBCACBC
Çıxış verilənlərinə nümunə
2
#include <iostream>#include <stdio.h>usingnamespacestd;intmain (){intn,k;chars[100001], c;intM[100000], km1 , km2, i, j;scanf("%d%d", &n, &k);scanf("%s", s);M[n-1] = 0;for(i = n-2; i>= n- k - 1; i--)if(s[i] != s[n-1])M[i]=1;elseM[i]=0;for(i = n-k-2; i>= 0; i--){c=s[i];km1 = km2 = n;for(j = i+1; j<i+k;j++)if(c != s[j]){if(M[j]<km1) km1=M[j];}else{if(M[j]<km2) km2=M[j];}if(km2<km1 +1)M[i] = km2;elseM[i] = km1 + 1;}printf("%d\n",M[0]);return0;}
Hiç yorum yok:
Yorum Gönder