codeforces - 508B - Anton and currency you all know(贪心)

来源:互联网 发布:微课录屏制作软件 编辑:程序博客网 时间:2024/05/29 04:43

codeforces - 508B - Anton and currency you all know(贪心)

Link:http://codeforces.com/contest/508/problem/B

题意:
给出一个长度小于105的奇数,交换其中两位,使其变成一个偶数,若有多种做法输出最大的。若不能构造出一个偶数,输出-1。

解法:
贪心。一开始以为只需交换最高位偶数即可,秒送wa。
正确解法是找出最高位的比最末位奇数小的偶数,交换它们。
若没有,交换最低位的偶数与最末位奇数。

#include <bits/stdc++.h>#define inf 0x3f3f3f3f#define max(a,b) a>b?a:b#define min(a,b) a>b?b:ausing namespace std;char a[100010];int main(){    gets(a);    bool f=0;    int l=strlen(a);    for(int i=0;i<l;i++)    {        if((a[i]-'0')%2==0&&a[i]<a[l-1])        {            f=1;            swap(a[i],a[l-1]);            break;        }    }    if(!f)    {        for(int i=l-1;i>=0;i--)        {            if((a[i]-'0')%2==0)            {                f=1;                swap(a[i],a[l-1]);                break;            }        }    }    if(f)        puts(a);    else         puts("-1");    return 0;}
0 0