La stringa criptata è una stringa di L caratteri minuscoli dell’alfabeto latino ed ha la caratteristica di essere palindroma, si può quindi leggere da destra verso sinistra e viceversa senza che cambi. All’ interno di questa stringa alcune lettere sono state sostituite da delle cifre comprese tra 0 e N-1. La password può essere ricostruita se e solo se tutte le N cifre distinte hanno una corrispondenza con una lettera mantenendo la stringa palindroma.
Scrivi un programma che dato N, L e la stringa criptata ricostruisca la corrispondenza cifra-carattere
La password viene ottenuta concatenando in ordine i caratteri delle corrispondenze
Input
Il programma deve leggere da un file di nome ‘input.txt’. Nella prima riga sono presenti due interi separati da uno spazio: N e L, rispettivamente il numero di cifre incognite e il numero di caratteri della stringa. Nella seconda riga è presente ls stringa di L caratteri senza spazi.
Output
Il programma deve scrivere in un file di nome ‘output.txt’. Deve venire stampata la stringa ‘impossibile’ se non esiste una corrispondenza cifra-carattere 0 se ne esistono molteplici. Altrimenti stampare nel file una stringa di N caratteri: la password decodificata.
Assunzioni
0 < N <= 10
2 <= L <= 200.000 (un caso con L = 50.000.000)
0 <= i < N
L è pari
Esempio
inputfl.txt outputflcxt
2 10 nw
01lrbbrlwn
inputfl.txt output .txt
1 10 impossibile
ebg00hdgbe
inputfl.txt output.txt
1 10 impossibile
0VWqttqWV0
Note
Nel secondo caso non esiste una corrispondenza per la cifra 0. Nel terzo invece ne esistono molteplici.
Qui basta scorrere e sostituire n volte la stringa. Se non ci sono lacune corrispondenze stampare "imossibile"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <cstdlib> #include <iostream> #include <fstream> #include <string> #define no "impossibile"; using namespace std; int main() { ifstream in("input.txt"); ofstream out("output.txt"); int n,l,j=0,k,f,sl,si; string s; bool iff =true; in>> n>>l>>s; sl=s.length(); char vect[n]; for (int i=0; i< sl;i++){ si=s[i]; k = si - '0'; f =s[sl-1-i]; if ( isdigit(s[i])&& k ==j){ if (isdigit(f)) iff=false; for (int i=0;i<sl;i++) if(s[i]== si) s[i]=f; vect[j++] = f; }} for (int i=0; i< s.length();i++) if (s[i] != s[s.length()-1-i]) iff=false; if (iff) for (int i=0; i< n;i++) out << vect[i]; else out<<no; return 0; } |
Nessun commento:
Posta un commento
Si prega di non commentare in modo volgare e/o offensivo.