Un problema bonito y "raro"...
Ahí va un programa que vale para cualquiera N carcateres, (hasta 1000), metidos por teclado, hasta que se mete el fin de fichero... (no incluye separadores entre los caracteres)
#include <iostream>
#include <algorithm> // min, max
using namespace std;
#define MAX 1000
/*
P : N >= 0
Q : count = #i : 0 <= i < N-1: twin(V,N,i)
where twin(V,N,i) ::= V[i]==V[i+1]) &&
((i==0) ||
((i>0) and V[i]!=V[i-1]) ||
(i>1) and V[i-1]==V[i-2])
*/
int twins(const int V[MAX], const int N)
{
int n,count;
for(n=count=0; n<N-1 ; n+=1+(V[n]==V[n+1]))
count += (V[n]==V[n+1]) ;
return count;
}
int main(int argc, char *args[])
{
char c;
int N;
int V[MAX];
for ( N=0 ; (N<MAX) && (cin >> c) ; N++ ) V[N]= c;
cout << N << " " << twins(V,N) << endl;
return 0;
}
/*
0 n N
+-----+-----+-----+-----+-----+-...-+-----+
| a | a | a | b | b | | r |
+-----+-----+-----+-----+-----+-...-+-----+
(Bizarre...)
I : Q[N/n] and
0 <= n <= N
B : n<N-1
C(n) : N-n >= 0
step : n = n + (1 + V[i]==V[i+1])
O(n) (linear)
*/
El primer parametro da el numero de caracteres leidos (N) el segundo, el numero de "parejas" según el criterio del problema
aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo*
(La linea tiene 46 caracteres y 15 parejas)
Y la bonita. Es
importante el * porque cin no toma separadores y saldrian más parejas de las normales, juntando los renglones.
aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo*
oooaaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnn*
nnnoooaaabbbcccdddeeefffggghhhiiijjjkkklllmmm*
mmmnnnoooaaabbbcccdddeeefffggghhhiiijjjkkklll*
lllmmmnnnoooaaabbbcccdddeeefffggghhhiiijjjkkk*
kkklllmmmnnnoooaaabbbcccdddeeefffggghhhiiijjj*
jjjkkklllmmmnnnoooaaabbbcccdddeeefffggghhhiii*
iiijjjkkklllmmmnnnoooaaabbbcccdddeeefffggghhh*
hhhiiijjjkkklllmmmnnnoooaaabbbcccdddeeefffggg*
ggghhhiiijjjkkklllmmmnnnoooaaabbbcccdddeeefff*
fffggghhhiiijjjkkklllmmmnnnoooaaabbbcccdddeee*
eeefffggghhhiiijjjkkklllmmmnnnoooaaabbbcccddd*
dddeeefffggghhhiiijjjkkklllmmmnnnoooaaabbbccc*
cccdddeeefffggghhhiiijjjkkklllmmmnnnoooaaabbb*
bbbcccdddeeefffggghhhiiijjjkkklllmmmnnnoooaaa*
15 lineas por 15 parejas da 225 parejas