Antipalindroma

Correttore online – Facili

Una stringa di caratteri si dice palindroma se risulta identica sia che venga letta da sinistra a destra sia che venga letta da destra a sinistra.
Per esempio, acca è una stringa palindroma.

Una sottostringa è una sequenza di caratteri consecutivi scelti dalla stringa data.
Per esempio, ac è una sottostringa di acca mentre aca non lo è perché un carattere viene saltato in essa.

Scrivere un programma che riceve una stringa S palindroma in ingresso, e restituisce la sottostringa di S di massima lunghezza che non sia palindroma.

Nota: il correttore considera la stringa S in ingresso anche non palindroma.

In caso di più sottostringhe di pari lunghezza massima che soddisfano i requisiti sopra, il programma deve restituire quella che appare più a sinistra.

Dati di input

Il file input.txt è composto da una sola riga contenente la stringa S fornita in ingresso.
Tale stringa è una sequenza non vuota, costituita dalle lettere dell’alfabeto codificate in ASCII, e la sua massima lunghezza è di 100 caratteri.

Dati di output

Il file output.txt è formato da una sola riga contenente la sottostringa di S di massima lunghezza non palindroma.
Se tutte le sottostringhe non vuote di S sono palindrome, il file deve contenere l’indicazione NO SOLUZIONI.

Nota: il correttore si aspetta la risposta “NO SOLUZIONI.”, con il punto alla fine…

Esempi di input/output

input.txt output.txt
abba abb

Autore/i: A.S. Stankevich, ACM ICPC Team St. Petersburg State University of Information technology, Mechanics and Optics.


Tenendo conto delle note…

Se la stringa s non è palindroma allora la risposta è s, altrimenti s = xyz…zyx cioè inizia e finisce con x, poi continua e finisce con y, …

Considero la stringa senza l’ultima lettera t = xyz…zy.

Se t non è palindroma allora t è la sottostringa di lunghezza massima a partire dal lato sinistro…

Se t è palindroma allora x=yy=z, z=… , cioè tutte le lettere di t e di s sono uguali, s=xxx…xxx, e non esiste una sottostringa di s non palindroma.

Conclusioni:

se s non è palindroma
    risposta = s
altrimenti se t non è palindroma allora
    risposta = t
altrimenti
    risposta = "NO SOLUZIONI."
/*
    www.valcon.it
	OII - Esercizi facili - Antipalindroma
*/

#include
#include // strlen() - strncpy()

long palindroma(char* s, int start, int stop)
{
	while(start < stop)
	{
		if(s[start] != s[stop])
		{
		    return 0;
    	}
		else
		{
			
			start++;
			stop--;
		}     
	}
	return 1;
}

int main()
{
    char s[101],
    ss[101];
	
    FILE* fin =fopen( "input.txt","r");
    FILE* fout=fopen("output.txt","w");
	
    fscanf(fin, "%s", s)

    int n=strlen(s);
    if(!palindroma(s,0,n-1))
        fprintf(fout, "%s", s);
    else
    {
        strncpy(ss, s, n-1);
        if(palindroma(ss,0,n-2))
            fprintf(fout, "NO SOLUZIONI.");
        else
            fprintf(fout, "%s", ss);
    }
    return 0; 
}