A.
恶心模拟。。
模拟一下分类即可
数字类,数字0,或者都是数字
字母类,字母空的也是字母,有字母就是字母
#include<bits/stdc++.h>
#define INF 1e9
using namespace std;
typedef long long ll;
const int N=2e5+9;
string number[N],capital[N];
int number_pos,capital_pos;
void lan(){string s;cin>>s;s+=";";string s1="";for(int i=0;i<s.size();){s1="";while(i<s.size() && s[i]!=',' && s[i]!=';'){//读取完整s1+=s[i];i++;}if(s1==""){//字母capital[++capital_pos]=s1;i++;continue;}if(s1=="0"){//数字number[++number_pos]=s1;}else if(s1[0]=='0'){//01capital[++capital_pos]=s1;}else{//全是数字才是数字,其他都是字母bool flag=true;for(int j=0;j<s1.size();j++){if(s1[j]<'0' || s1[j]>'9'){flag=false;break;}}if(flag){number[++number_pos]=s1;}else{capital[++capital_pos]=s1;}}i++;}if(!number_pos){//没有就-cout<<"-";}else{//输出前n-1一个cout<<"\"";for(int i=1;i<number_pos;i++){cout<<number[i]<<",";}cout<<number[number_pos]<<"\"";//最后一个特别处理}cout<<'\n';if(!capital_pos){cout<<"-";}else{cout<<"\"";for(int i=1;i<capital_pos;i++){cout<<capital[i]<<",";}cout<<capital[capital_pos]<<"\"";}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int q=1;while(q--){lan();}return 0;
}
B.
二分upper_bound就好了
#include<bits/stdc++.h>
#define INF 1e9
using namespace std;
typedef long long ll;
const int N=2e5+9;
int a[N],b[N];
int n,m;
int work(int x){return upper_bound(a+1,a+1+n,x)-a-1;
}
void lan(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=m;i++){cin>>b[i];}sort(a+1,a+1+n);for(int i=1;i<=m;i++){cout<<work(b[i])<<" ";}}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int q=1;while(q--){lan();}return 0;
}
C.
贪心,大的且只有奇数数量就变成小的,回文串对称特性所以用栈模拟后半段即可
#include<bits/stdc++.h>
#define INF 1e9
using namespace std;
typedef long long ll;
const int N=2e5+9;
int c[N];
void lan(){string s;cin>>s;int n=s.length();for(int i=0;i<n;i++){//桶存c[s[i]-'a']++;}for(int i=25;i>=0;i--){//倒着找,找到的肯定是最大的if(c[i]&1){for(int j=0;j<26;j++){if(c[j]&1){//正着找,找到的肯定是最小的,但是也有可能找不到 abac[j]++;c[i]--;break;}}}}int flag=-1;//记录中间字母for(int i=0;i<26;i++){if(c[i]&1){flag=i;}}stack<char> stk;//栈模拟后面for(int i=0;i<26;i++){//找最小必然字典序最小for(int j=1;j<=c[i]/2;j++){cout<<char(i+'a');stk.push(char(i+'a'));}}//aabbif(flag!=-1){cout<<char(flag+'a');//输出中间}//倒着输出即可while(!stk.empty()){cout<<stk.top();stk.pop();}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int q=1;while(q--){lan();}return 0;
}