Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int main(){
- int key, len;
- scanf("%d", &key);
- string str;
- cin >> str;
- if(key == 1){
- cout << str;
- return 0;
- }
- len = str.size();
- string ans(len + 1, '\0');
- // Up Zip
- int jump = 3 * key - 4;
- int sIdx = 0;
- int aIdx = key - 1;
- while(aIdx < len){
- for(int i = 0; i < key && aIdx < len; ++i){
- ans[aIdx++] = str[sIdx++];
- }
- aIdx += jump;
- }
- // Middle Zip
- for(int l = 0; l < key - 2; ++l){
- int up = key + l * 2;
- int down = key + (key - 3 - l) * 2;
- bool isUp = true;
- aIdx = key - 2 - l;
- while(aIdx < len){
- ans[aIdx++] = str[sIdx++];
- if(isUp){
- aIdx += up;
- } else {
- aIdx += down;
- }
- isUp = !isUp;
- }
- }
- // Down Zip
- ans[0] = str[sIdx++];
- aIdx = jump + 1;
- while(aIdx < len){
- for(int i = 0; i < key && aIdx < len; ++i){
- ans[aIdx++] = str[sIdx++];
- }
- aIdx += jump;
- }
- printf("%s", ans.c_str());
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement