/* bianco nero in tempo lineare e memoria costante Davide Carazzato */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long long #define U unsigned #define vi vector #define ii pair #define vii vector #define so ( _A ) sizeof ( _A ) #define INIT ( _V, _val ) memset ( _V, _val, so ( _V ) ) #define pb push_back #define mp make_pair #define POS ( v1, v2, x, f ) nth_element ( v1, x, v2, f ) //trova la posizione di x nel vettore che inizia con v1 e finisce con v2 utilizzando come funzione di confronto f #define sz ( a ) ( (int) a.size() ) #define MAX ( a, b ) ( a > b ) ? a : b #define MIN ( a, b ) ( a < b ) ? a : b #define ABS ( a ) ( a > 0 ) ? a : -a #define ODD ( a ) ( a & 1 ) #define MID ( a, b ) ( ( a + b ) >> 1 ) #define MAXX ( a, b, c ) ( MAX ( MAX ( a, b ), c ) ) #define MINN ( a, b, c ) ( MIN ( MIN ( a, b ), c ) ) using namespace std; int main(){ FILE *fi = fopen ( "input.txt", "r" ); FILE *fo = fopen ( "output.txt", "w" ); int N, i = 1; fscanf ( fi, "%d", &N ); fgetc(fi); char init; fscanf ( fi, "%c", &init ); char c = init, prev; while ( c == init && i <= N ){ fscanf ( fi, "%c", &c ); i++; } prev = c; int i1 = i, i2 = i; while (i <= N){ while (i <= N && c == prev){ fscanf ( fi, "%c", &c ); i++; } i2 = i-1; //per sapere da dove ripartire al prossimo controllo while(i <= N && c == init){ fscanf ( fi, "%c", &c ); i++; } if(i > N) return 0; fprintf ( fo, "%d %d\n", i1, i-1 ); i1 = i2; } return 0; }