Codeforces 1291A - Even But Not Even

题目大意:

给定一个字符串数字(很大)

问能不能删除一些数字(或者不删除)

使得剩余的数字各位数相加是偶数,但是这整个数字是个奇数

 

解题思路:

统计字符串中单个数字奇数的个数

分情况

个数为0或者1时,显然不存在这样的数字,输出-1

个数大于等于2且为偶数时,只需要保证最后一位是奇数,从后往前删除字符直到遇到奇数位

个数大于2且为奇数时,保证最后一位为奇数,并且还要删除一位奇数

#include<bits/stdc++.h>
using namespace std;
void solve(){
    int n,i,n1=0;
    string s;
    cin>>n>>s;
    for(i=0;i<n;i++)
        if((s[i]-'0')%2)
            n1++;
    if(n1&&n1%2==0){
        while(n&&(s[n-1]-'0')%2==0){
            s.erase(n-1,1);
            n--;
        }
    }
    else if(n1>2){
        while(n&&(s[n-1]-'0')%2==0){
            s.erase(n-1,1);
            n--;
        }
        s.erase(n-1,1);//遇到奇数,删除后继续删偶数
        n--;
        while(n&&(s[n-1]-'0')%2==0){
            s.erase(n-1,1);
            n--;
        }
    }
    else
        s="-1";
    cout<<s<<'\n';
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int T;cin>>T;while(T--)
        solve();
    
    return 0;
}

 

posted @ 2020-02-03 00:48  StelaYuri  阅读(240)  评论(0编辑  收藏  举报