1 条题解
-
0
自动搬运
来自洛谷,原作者为

wangbinfeng
今天搞完大概就永远不会碰 OI 了,大家祝好!搬运于
2025-08-24 22:29:28,当前版本为作者最后更新于2021-03-21 09:06:58,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
大家好,感谢大家阅读这篇题解!
思路:
首先,我们看到题,也许直觉认为是统计数字个数(数字是指 的数
,出题人语文水平有待提高)。but
abc123abc2a3a1只有三个数字,但答案是 ,可以得出应该求得是数。统计数的个数大家都会吧,具体在注释里。
我看过其他的题解,大多都用 C++ 中的
string,所以本题解使用读入一个字符判断一次。然后还有几个易错点,大家可以看更新日志(数据有点水,所以容易忽略细节,大家一定注意)。
程序:
//由于处理了2个hack且间隔时间较长,代码刻意加入了很多内容,可能使可读性变差,求谅解 #include <bits/stdc++.h> using namespace std; bool num[1000];//存储是否出现过 bool flag;//存有没有出现过0 char c,c2;//由于没有用字符串,只能多开一个变量存上一个字符 int ans,x; int main(){ for(c=getchar();c!=EOF;c=getchar()){ if(c2=='0'&&(c<'0'||c>'9')&&x==0)flag=true; if(c>='0'&&c<='9')x=x*10+c-'0';//计算现在是多少 else num[x]=true,x=0;//记录并归零 c2=c;//记录上一个字符 } if(c2>='0'&&c2<='9'&&num[x]==false)ans++;//注意要有特判 if(c2=='0')ans++; for(int i=1;i<1000;i++)ans+=num[i]; cout<<ans+flag; }最后,谢谢大家支持!
更新日志:
- 4月27日:感谢 @cd8gsh 提醒,原因:数字有可能在最后,加入特判。
- 8月20日:感谢 @ZhuangnnnnE 提醒,原因:由于处理上一个 hack 触发了潜在 bug(即 0 这个特殊的数,它会与代表 目前没有存数字 的 0 重复),已修正。
- 我没想到红题 hack 这么多,想大家谢罪,也感谢 2 位发现 hack 的同学!
- 1
信息
- ID
- 6508
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者