# PBinfo #4017 – Skip – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cifrul Skip
Gigel a găsit pe o foaie criptări ale unor cuvinte în cifrul Skip.    Criptarea funcționează astfel:


Fie un cuvânt de lungime n. Cuvântul îl vom impărti în două părti, prima parte de lungime [n/2], iar a doua parte de [(n+1)]/2. Vom scrie prima literă din prima parte, prima literă din a doua parte, a 2-a literă din prima parte, a 2-a literă din a doua parte, a 3-a literă din prima parte, a 3-a literă din a doua parte … :

AMONG -> AOMNG
SUSPICIOUS -> SCUISOPUIS
SECRET -> SREECT
CIPHER -> CHIEPR

Criptarea unui text constă în criptarea succesivă a fiecărui cuvânt.

Cifrul Skip
Se dă un numar c care poate fi doar 1 sau 2 și un text în care cuvintele sunt separate printr-un spațiu.

Pentru c=1, textul reprezintă un mesaj necriptat și se cere să-l afișați în urma criptării.

Pentru c=2, textul reprezintă un mesaj criptat și se cere să-l afișați în urma decriptării.

Date de intrare
Fișierul de intrare skip.in citește un număr c și un mesaj.

Date de ieșire
Fișierul de ieșire skip.out va conține pe prima linie mesajul rezultat în urma operației cerute.

Restricții și precizări

1≤ lungimea mesajului ≤1000000

Exemplul 1:
skip.in

1
THERE IS ONE IMPOSTOR AMONG US
skip.out

TEHRE IS ONE ISMTPOOR AOMNG US
Exemplul 2:
skip.in

2
TEHRE IS ONE ISMTPOOR AOMNG US
skip.out

THERE IS ONE IMPOSTOR AMONG US

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
char v[1000001];
int main()
{
    ifstream cin("skip.in");
    ofstream cout("skip.out");
    string cuv;
    int cer;
    cin>>cer;
    if(cer==1)
    {
        while(cin>>cuv)
        {
            for(int i=0;i<cuv.size()/2;i++)
            {
                cout<<cuv[i]<<cuv[i+cuv.size()/2];
            }
            if(cuv.size()%2==1)
                cout<<cuv[cuv.size()-1];
            cout<<" ";
        }
    }
    else
    {
        while(cin>>cuv)
        {
            for(int i=0;i<cuv.size()/2;i++)
                v[i]=cuv[2*i],v[cuv.size()/2+i]=cuv[2*i+1];
            if(cuv.size()%2==1)
                v[cuv.size()-1]=cuv[cuv.size()-1];
            for(int i=0;i<cuv.size();i++)
                cout<<v[i];
            cout<<" ";
        }
    }
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4017)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4017/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4017/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
