CodeForces - 1251C(思考+ +貪欲マージソート)

問題の意味

https://vjudge.net/problem/CodeForces-1251C

隣接する奇数偶数の列の位置を交換することができない、他の隣接状況が最小数である表現する文字列を尋ねる、交換することができます。

思考

隣接する偶数、奇数の固定位置は、それが一緒に一緒に奇数、偶数プットを置くことが可能であり、これらの山は、マージソートすることができます。

コード

#include <ビット/ STDC ++ H> 
名前空間STDを使用して、
#define INF 0x3f3f3f3f 
の#define LL長い長
のconst int型N = 200005。
const int型MOD = 1E9 + 7。
constのダブルEPS = 1E-8; 
constのダブルPI = ACOS(-1.0); 
#define lowbit(X)(X&( - X))
LL GCD(-1,11,11- B){戻りB == 0:GCD(B、%のB);}?
LL qpow(-1,11,11- B) {LL RES = 1;一方、(b)は、{(B&1)であれば、RES = RES *%のMOD; A = A *%のMOD; B >> = 1;}戻りRES;} 
LL INV(LL A、LL P ){戻りqpow(P-2);} 
int型のmain()
{ 
    のstd :: IOS :: sync_with_stdio(偽)。
    int型T; 
    cinを>>トン。
    一方、(t--)
    { 
        文字列s。
        cinを>>秒; 
        文字列JI、OU。
        INT L = s.length()。
        以下のために(; I <L; INT iが0 = I ++)
        { 
            IF((S [I] - '0')%2)
                JI + = S [i]は、
            他の
                OU + = S [i]は、
        } 
        INT私がj = 0、李= ji.length()、LJ = ou.length()= 0。
        一方、(I <LI && J <LJ)
        { 
            IF(JI [I] <OU [J])
            { 
                COUT << JI [I]。
                I ++; 
            } 
            { 
                COUT << OU [J]。
                J ++; 
            } 
        } 
        ながら(I <LI)
            COUT << JI [I ++]。
        しばらく(J <LJ)
            coutの<<または[J ++]; 
        coutの<<てendl; 
    } 
    戻り0; 
}

  

おすすめ

転載: www.cnblogs.com/mcq1999/p/11846308.html