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; }