zoukankan      html  css  js  c++  java
  • Ugly Pairs CodeForces

    题目链接:https://vjudge.net/problem/CodeForces-1156B

    题意:给定一串字符,相邻字符的ASCII码不能是相邻的数字,比如ABC,假设ASCII码为,99 100 101 ,

    就是不符合题意的字符串,ACF,就可以。

    思路:从相邻字符的ASCII码不能是相邻的数字,可以想到字符串之间ASCII码至少差2,然后发现

    ACE...假设是奇数ASCII码,BDF是偶数ASCII码,那么我们不妨把他们分成两组,

    奇数的字符,偶数的字符,那就简单了,我们可以直接先把奇数的输出,再把偶数的输出,那么字符串

    之间相邻字符的ASCII码不能是相邻的数字就很好来解决了,下面字符串都转化为数字,列举一些情况

    ①  只有偶数

    ②  只有奇数

    ③   1 3 5 7 2

    ④   1 3 5 7 6 

    ⑤    1 3 2

    ⑥    1 3 2 4

    下面四种情况判定下就OK了,代码有呼应。


     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <queue>
     6 #include <map>
     7 #include <cmath>
     8 #include <iomanip>
     9 using namespace std;
    10 
    11 typedef long long LL;
    12 #define inf (1LL << 25)
    13 #define rep(i,j,k) for(int i = (j); i <= (k); i++)
    14 #define rep__(i,j,k) for(int i = (j); i < (k); i++)
    15 #define per(i,j,k) for(int i = (j); i >= (k); i--)
    16 #define per__(i,j,k) for(int i = (j); i > (k); i--)
    17 
    18 
    19 int main(){
    20 
    21     ios::sync_with_stdio(false);
    22     cin.tie(0);
    23 
    24     char str[110];
    25     vector<int> one;
    26     vector<int> two;
    27 
    28     int T;
    29     cin >> T;
    30     while(T--){
    31 
    32         cin >> str;
    33 
    34         one.clear(); //奇数
    35         two.clear(); //偶数
    36         int len = strlen(str) - 1;
    37         rep(i,0,len){
    38             int tmp = str[i] - 'a' + 1;
    39             //判奇偶
    40             if(tmp & 1) one.push_back(tmp);
    41             else two.push_back(tmp);
    42         }
    43 
    44         //排好序,方便比较
    45         sort(one.begin(),one.end());
    46         sort(two.begin(),two.end());
    47         //只有偶数
    48         if(one.size() == 0){
    49             rep(o,0,(int)two.size() - 1) cout << (char)('a' + two[o] - 1);
    50             cout << endl;
    51         }
    52         //只有奇数
    53         else if(two.size() == 0){
    54             rep(o,0,(int)one.size() - 1) cout << (char)('a' + one[o] - 1);
    55             cout << endl;
    56         }
    57         else{
    58             int End_b = two.size() - 1;
    59             int End_a = one.size() - 1;
    60 
    61                 //判断③④⑤⑥的情况
    62                 if(abs(two[0] - one[End_a]) != 1){
    63                     rep(o,0,(int)one.size() - 1) cout << (char)('a' + one[o] - 1);
    64                     rep(o,0,(int)two.size() - 1) cout << (char)('a' + two[o] - 1);  
    65                     cout << endl;
    66                 }
    67                 else if(abs(two[End_b] - one[0]) != 1){
    68                     rep(o,0,(int)two.size() - 1) cout << (char)('a' + two[o] - 1);
    69                     rep(o,0,(int)one.size() - 1) cout << (char)('a' + one[o] - 1);
    70                     cout << endl;
    71                 }
    72                 else cout << "No answer" << endl;
    73 
    74         }
    75 
    76     }
    77     
    78     getchar(); getchar();
    79     return 0;
    80 }
  • 相关阅读:
    利用border-radius画椭圆
    关于使用svg构建六边形蜂巢列表的方式
    JavaScript拖拽效果的原理及实现
    逆战班-JS的形参与实参
    前端面试&笔试汇总
    less学习---less的混合(mixin)
    less学习---less的嵌套规则
    less学习----less变量
    vue-cli3实现将数据导出为Excel表
    js中apply和call方法浅析
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/11324478.html
Copyright © 2011-2022 走看看