题解归档 - cf600A
本文最后由方少年更新于2026 年 6 月 28 日,已超过0天没有更新。如果文章内容或图片资源失效,请留言反馈,将会及时处理,谢谢!
题解归档 - cf600A
本文由 cf-code 本地题解库自动归档;公开内容以本地 AC/验证版本为准。
- 本地编号:
cf600A - 本地来源:
problems/cf600A/idea.md - 题目链接:https://codeforces.com/contest/600/problem/A
- 原始标题:cf600A Extract Numbers
思路
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 ~ ~
文章标题:题解归档 - cf600A
文章链接:https://www.fangshaonian.cn/archives/361/
最后编辑:2026 年 6 月 28 日 19:08 By 方少年
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)