fbpx

Problema #1711 – siruri_concatenate – Rezolvari PBInfo

de Mihai-Alexandru

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_concatenate.in 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_concatenate.out 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:

siruri_concatenate.in

5
sirsir
micropico
pp
vara
nanonano

siruri_concatenate.out

3

Explicație

Cele 3 şiruri din fişier obţinute prin concatenarea a două şiruri identice sunt: sirsir (sir), pp (p) şi nanonano (nano).

#include <bits/stdc++.h>

using namespace std;

ifstream cin("siruri_concatenate.in");
ofstream cout("siruri_concatenate.out");

int main()
{
    int n;
    cin >> n;
    int cnt=0;
    for(int i = 1 ; i <= n ; ++i)
    {
        char s[5001];
        cin >> s;
        bool ok = true;
        if(strlen(s)%2==0)
        {
            for(int j = 0 , q = strlen(s) / 2 ; s[q]!='\0' ; ++j , ++q)
            if(s[q]!=s[j])
            {
                ok=false;
                break;
            }
        }
        else
            ok=false;
        if(ok)
            cnt++;
    }
    cout << cnt;
    return 0;
}
Comentarii

S-ar putea sa iti placa