본문 바로가기

코드포스

[코드포스 Practice17] D. Pasha and String

으음...

N^2 밖에 모르겠다...

 

뭔가 좌우 대칭이고 뭉텅이로 바뀌고 하는 거 보면 특징 있을 것 같은데 모르겠다....

 

 

 

 

 

gjr???

풀었다

 

바뀐 횟수 센 다음에 

i = 0부터 i = size()/2까지 반복문 돌면서 계속 더해나가는데

합이 홀수라면 뒤집어야하고 합이 짝수라면 안 뒤집어도 된다. 

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
 
using namespace std;
using i64 = long long;
 
int main() {
    string s;
    cin >> s;
    int m;
    cin >> m;
    
    vector<int> count((s.size()+1)/2, 0);

    for (int i = 0; i < m; i++)
    {
        int tmp;
        cin >> tmp;
        count[tmp-1]++;
    }
    
    if (count[0] % 2 == 1)
    {
        char tmp;
        tmp = s[0];
        s[0] = s[s.size()-1];
        s[s.size()-1] = tmp;
    }
    
    for (int j = 1; j < (s.size()+1)/2; j++)
    {
        count[j] += count[j-1];
        if (count[j] % 2 == 1)
        {
            char tmp;
            tmp = s[j];
            s[j] = s[s.size()-1-j];
            s[s.size()-1-j] = tmp;
        }
    }
    
    for (int i = 0; i < s.size(); i++)
    {
        cout << s[i];
    }
    
    return 0;
}

 

 

끝~~ 

얼른 E번까지 끝내봐야지