• Codeforces Round #616 (Div. 2) A Even But Not Even 水题


    A. Even But Not Even

    time limit per test1 second
    memory limit per test256 megabytes

    Let's define a number ebne (even but not even) if and only if its sum of digits is divisible by 2 but the number itself is not divisible by 2. For example, 13, 1227, 185217 are ebne numbers, while 12, 2, 177013, 265918 are not. If you're still unsure what ebne numbers are, you can look at the sample notes for more clarification.

    You are given a non-negative integer s, consisting of n digits. You can delete some digits (they are not necessary consecutive/successive) to make the given number ebne. You cannot change the order of the digits, that is, after deleting the digits the remaining digits collapse. The resulting number shouldn't contain leading zeros. You can delete any number of digits between 0 (do not delete any digits at all) and n−1.

    For example, if you are given s=222373204424185217171912 then one of possible ways to make it ebne is: 222373204424185217171912 → 2237344218521717191. The sum of digits of 2237344218521717191 is equal to 70 and is divisible by 2, but number itself is not divisible by 2: it means that the resulting number is ebne.

    Find any resulting number that is ebne. If it's impossible to create an ebne number from the given number report about it.

    Input

    The input consists of multiple test cases. The first line contains a single integer t (1≤t≤1000) — the number of test cases. The description of the test cases follows.

    The first line of each test case contains a single integer n (1≤n≤3000) — the number of digits in the original number.

    The second line of each test case contains a non-negative integer number s, consisting of n digits.

    It is guaranteed that s does not contain leading zeros and the sum of n over all test cases does not exceed 3000.

    Output

    For each test case given in the input print the answer in the following format:

    If it is impossible to create an ebne number, print "-1" (without quotes);
    Otherwise, print the resulting number after deleting some, possibly zero, but not all digits. This number should be ebne. If there are multiple answers, you can print any of them. Note that answers with leading zeros or empty strings are not accepted. It's not necessary to minimize or maximize the number of deleted digits.

    Example

    input
    4
    4
    1227
    1
    0
    6
    177013
    24
    222373204424185217171912
    output
    1227
    -1
    17703
    2237344218521717191

    Note

    In the first test case of the example, 1227 is already an ebne number (as 1+2+2+7=12, 12 is divisible by 2, while in the same time, 1227 is not divisible by 2) so we don't need to delete any digits. Answers such as 127 and 17 will also be accepted.

    In the second test case of the example, it is clearly impossible to create an ebne number from the given number.

    In the third test case of the example, there are many ebne numbers we can obtain by deleting, for example, 1 digit such as 17703, 77013 or 17013. Answers such as 1701 or 770 will not be accepted as they are not ebne numbers. Answer 013 will not be accepted as it contains leading zeroes.

    Explanation:

    1+7+7+0+3=18. As 18 is divisible by 2 while 17703 is not divisible by 2, we can see that 17703 is an ebne number. Same with 77013 and 17013;
    1+7+0+1=9. Because 9 is not divisible by 2, 1701 is not an ebne number;
    7+7+0=14. This time, 14 is divisible by 2 but 770 is also divisible by 2, therefore, 770 is not an ebne number.
    In the last test case of the example, one of many other possible answers is given. Another possible answer is: 222373204424185217171912 → 22237320442418521717191 (delete the last digit).

    题意

    给你长度为n的字符串s,让你从字符串中删除一些数字,然后使得这个字符串组成的数字是一个合法的,所有数字和加起来是偶数,但这个数字是奇数的一个字符串。

    题解

    视频题解:https://www.bilibili.com/video/av86529667/

    数字和为偶数的奇数,我们倒着找第一个奇数,以奇数结尾的数一定是奇数。

    数字和为偶数,就是里面有偶数个奇数,这个我们判断一下里面有几个,如果是奇数,我们就减去最后一个。特殊情况是只有1个奇数的时候。

    代码

    #include<bits/stdc++.h>
    using namespace std;
     
    void solve(){
        int n;
        string s;
        cin>>n>>s;
        int len = -1;
        for(int i=s.size()-1;i>=0;i--){
            if((s[i]-'0')%2==1){
                len=i;
                break;
            }
        }
        if(len==-1){
            cout<<"-1"<<endl;
            return;
        }
        int num = 0;
        for(int i=0;i<=len;i++){
            if((s[i]-'0')%2==1){
                num++;
            }
        }
        if(num%2==0){
            for(int i=0;i<=len;i++){
                cout<<s[i];
            }
            cout<<endl;
            return;
        }else{
            if(num==1){
                cout<<"-1"<<endl;
                return;
            }
            int flag = -1;
            for(int i=len-1;i>=0;i--){
                if((s[i]-'0')%2==1){
                    flag=i;
                    break;
                }
            }
            for(int i=0;i<=len;i++){
                if(i==flag)continue;
                cout<<s[i];
            }
            cout<<endl;
        }
    }
    int main(){
        int t;
        cin>>t;
        while(t--){
            solve();
        }
    }
  • 相关阅读:
    中文字体
    URL锚点HTML定位技术机制
    关于JS异步加载方案
    select标签用法
    javascript refresh page 几种页面刷新的方法
    用JavaScript刷新框架子页面的七种方法
    robots.txt用法
    netstat 基本用法
    linux下ps命令
    socket编程和并发服务器
  • 原文地址:https://www.cnblogs.com/qscqesze/p/12256806.html
Copyright © 2020-2023  润新知