zoukankan      html  css  js  c++  java
  • 贪心 Codeforces Round #288 (Div. 2) B. Anton and currency you all know

    题目传送门

      1 /*
      2     题意:从前面找一个数字和末尾数字调换使得变成偶数且为最大
      3     贪心:考虑两种情况:1. 有偶数且比末尾数字大(flag标记);2. 有偶数但都比末尾数字小(x位置标记)
      4     仿照别人写的,再看自己的代码发现有清晰的思维是多重要
      5 */
      6 #include <cstdio>
      7 #include <iostream>
      8 #include <algorithm>
      9 #include <cmath>
     10 #include <cstring>
     11 #include <map>
     12 using namespace std;
     13 
     14 const int MAXN = 1e5 + 10;
     15 const int INF = 0x3f3f3f3f;
     16 char s[MAXN];
     17 
     18 int main(void)        //Codeforces Round #288 (Div. 2) B. Anton and currency you all know
     19 {
     20     #ifndef ONLINE_JUDGE
     21         freopen ("B.in", "r", stdin);
     22     #endif
     23 
     24     scanf ("%s", &s);
     25 
     26     int len = strlen (s);
     27     bool flag = false;
     28     int x = -1;
     29     for (int i=0; i<len-1; ++i)
     30     {
     31         if ((s[i] - '0') % 2 == 0)
     32         {
     33             x = i;
     34             if (s[i] < s[len-1])
     35             {
     36                 swap (s[i], s[len-1]);
     37                 flag = true;    break;
     38             }
     39         }
     40     }
     41 
     42     if (!flag)
     43     {
     44         swap (s[x], s[len-1]);
     45     }
     46     (x != -1) ? printf ("%s
    ", s) : puts ("-1");
     47 
     48     return 0;
     49 }
     50 
     1 if (len == 1)
     2     {
     3         puts ("-1");
     4     }
     5     else if (len == 2)
     6     {
     7         if ((s[0] - '0') % 2 != 0)    puts ("-1");
     8         else
     9         {
    10             printf ("%c%c
    ", s[1], s[2]);
    11         }
    12     }
    13     else if (len == 3)
    14     {
    15         if ((s[1] - '0') % 2 == 0)
    16         {
    17             if ((s[0] - '0') % 2 == 0)
    18             {
    19                 if (s[0] > s[1])    swap (s[0], s[2]);
    20                 else    swap (s[1], s[2]);
    21                 printf ("%s
    ", s);
    22             }
    23             else
    24             {
    25                 swap (s[1], s[2]);
    26                 printf ("%s
    ", s);
    27             }
    28         }
    29         else if ((s[0] - '0') % 2 == 0)
    30         {
    31             swap (s[0], s[2]);
    32             printf ("%s
    ", s);
    33         }
    34         else    puts ("-1");
    35     }
    36     else
    37     {
    38         char ch = '0';    int x = -1;
    39         for (int i=len-2; i>=0; --i)
    40         {
    41             if ((s[i]-'0') % 2 == 0)
    42             {
    43                 if (ch <= s[i])
    44                 {
    45                     if (ch == s[i])
    46                     {
    47                         if (s[i] < s[len-1])
    48                         {
    49                             ch = s[i];     x = i;
    50                         }
    51                     }
    52                     else
    53                     {
    54                         ch = s[i];     x = i;
    55                     }
    56                 }
    57             }
    58         }
    59         if (x == -1)    puts ("-1");
    60         else
    61         {
    62             swap (s[x], s[len-1]);
    63             printf ("%s
    ", s);
    64         }
    65     }
    思维混乱的代码
    编译人生,运行世界!
  • 相关阅读:
    非同名数据库导入sql
    mybatis中的异常
    使用MyBatis时为什么Dao层不需要@Repository
    springboot项目启动后执行一段程序的方式
    构建SpringBoot项目
    springboot项目添加webapp目录
    springboot项目启动异常
    使用restTemplate出现的异常
    Spring中Bean的属性赋值@Value()---使用类配置的方式
    使用BeanUtils复制Java对象
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4366607.html
Copyright © 2011-2022 走看看