题解归档 - cf600A

题解归档 - cf600A

本文由 cf-code 本地题解库自动归档;公开内容以本地 AC/验证版本为准。

思路

cf600A Extract Numbers

题意

,; 切分字符串得到若干 word(可空)。若 word 是非负整数且无前导零(仅 0 或首位非零的全数字串),归入 a;否则归入 b。两串内部用 , 连接,顺序不变。空则输出 -,否则加双引号。

做法

扫一遍,遇分隔符或结尾处理当前 word:isNum 判全数字且非 01 这类前导零。用 fa/fb 标记是否已有 word,避免空串导致逗号丢失(如 1;;01,a0,",01,a0,")。

复杂度

O(|s|)。

代码

来源:problems/cf600A/solution.cpp

/* Author: likely
 * Time: 2026-06-08 04:13:57
**/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
string s,cur,sa,sb;
ll i,j,k,pd,fa,fb;
bool isNum(string w){
    if(w.empty()) return 0;
    if((ll)w.size()>1 and w[0]=='0') return 0;
    for(charc:w) if(c<'0' or c>'9') return 0;
    return 1;
}
int main(){
    cin>>s;
    sa=sb=cur="";
    fa=fb=0;
    for(i=0;i<=(ll)s.size();i++){
        if(i==(ll)s.size() or s[i]==',' or s[i]==';'){
            if(isNum(cur)){
                if(fa) sa+=",";
                sa+=cur;
                fa=1;
            }else{
                if(fb) sb+=",";
                sb+=cur;
                fb=1;
            }
            cur="";
        }else cur+=s[i];
    }
    if(fa) cout<<"\""<<sa<<"\""<<endl;
    else cout<<"-"<<endl;
    if(fb) cout<<"\""<<sb<<"\""<<endl;
    else cout<<"-"<<endl;
    return 0;
}
~  ~  The   End  ~  ~


 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
文章二维码 分类标签:归档TypechoAutoUpload
文章标题:题解归档 - cf600A
文章链接:https://www.fangshaonian.cn/archives/361/
最后编辑:2026 年 6 月 28 日 19:08 By 方少年
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
(*) 3 + 9 =
快来做第一个评论的人吧~