1711 - Siruri concatenate
Cerinţa
Scrieţi un program care citeşte din fişierul de intrare mai multe şiruri de caractere formate din litere mici ale alfabetului englez şi determină câte dintre acestea sunt formate din două şiruri identice (cu lungimea cel puţin 1) concatenate.
Date de intrare
Fișierul de intrare siruri_concatenatein.txt conține pe prima linie un număr natural nenul n, iar pe următoarele n linii câte un şir format din litere mici ale alfabetului englez.
Date de ieșire
Fișierul de ieșire siruri_concatenateout.txt va conține pe prima linie numărul de şiruri din fişierul de intrare care sunt formate din două şiruri identice concatenate.
Restricţii şi precizări
- 1 ⩽ n ⩽ 1000000
- şirurile au cel mult 5000 de caractere.
Exemplu 1
- siruri_concatenatein.txt
5 sirsir micropico pp vara nanonano
- siruri_concatenateout.txt
Datele de intrare corespund restrictiilor impuse 3
Exemplu 2
- siruri_concatenatein.txt
-5 sirsir micropico pp vara nanonano
- siruri_concatenateout.txt
Datele de intrare nu corespund restrictiilor impuse
Explicatie
Cele 3 şiruri din fişier obţinute prin concatenarea a două şiruri identice sunt: sirsir (sir), pp (p) şi nanonano (nano).
Rezolvare
<syntaxhighlight lang="python" line> def is_concatenated(s):
# Verifică dacă șirul s este format din două șiruri identice concatenate n = len(s) if n % 2 != 0: return False return s[:n//2] == s[n//2:]
def main():
with open('siruri_concatenatein.txt', 'r') as fin, open('siruri_concatenateout.txt', 'w') as fout: n = int(fin.readline().strip()) siruri = [fin.readline().strip() for _ in range(n)]
# Verifică dacă șirurile respectă restricțiile if not (1 <= n <= 1000000) or any(not s.islower() or len(s) > 5000 for s in siruri): fout.write("Datele de intrare nu corespund restrictiilor impuse\n") return
fout.write("Datele de intrare corespund restrictiilor impuse\n")
# Numără șirurile care sunt formate din două șiruri identice concatenate nr = sum(is_concatenated(s) for s in siruri) fout.write(str(nr) + '\n')
if __name__ == "__main__":
main()
</syntaxhighlight>