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

借我昔日热忱
**搬运于
2025-08-24 22:24:55,当前版本为作者最后更新于2020-10-26 13:20:10,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
一个有意思的字符串题目
(顺便吐槽一下毒瘤数据)
为什么说他有意思呢,他的数据点令人十分迷茫。 (
本体题解最有意思的地方在最下面) 因为这个数据点没公开,他的毒瘤数据我也不知道到底是怎样的。 (本体题解最有意思的地方在最下面)所有做题只得20分,以及对所有对自己的程序充满信心的看我的题解最好从下往上翻。
蒟蒻表示这个题目调试了一上午。。。
首先, 本题目就是一个字符串的单个处理问题 读入+判断
我用的是一边读入一边处理,单个字符读入用的是getchar();(getchar()可以读入单个字符包括空格跟换行符,20分的大部分人都出问题在处理换行符,不止开头要处理,数据中间也有可能会出现)
我的处理方法是:
if(a[len]=='\n') len--;
列举几个处理非常有可能出错的的情况:
字符方面
大写字母开头,数字在中间,大写字母结尾(AAA123AAA)
数字开头,大写字母在中间,数字结尾(123AAA123)
全是数字(123123)
全是大写字母(AAA)
可以先给大家看一下我的AC代码(
我的代码不重要,最重要的是下面的东西)#include<cstdio> #include<iostream> using namespace std; char a[10000]; int main(){ int n,len=1,sum=0,k=0; scanf("%d",&n);getchar(); a[1]=' '; for(int i=1;i<=n;i++){ while(true){ a[++len]=getchar(); if(a[len]=='\n') len--; // cout<<"|"<<a[len-1]; if(a[len]=='.'||a[len]=='!'||a[len]=='?'){ //for(int i=1;i<=len;i++)cout<<a[i]; len=1;a[1]=' '; break; } if(a[len-1]==' '&&a[len]>='A'&&a[len]<='Z'){ while(true){ //cout<<a[len]<<";"; a[++len]=getchar(); if(a[len]==' '||a[len]=='.'||a[len]=='?'||a[len]=='!'){ sum++; k=1; break; } if(a[len]<='9')break; } } if(k==1) if(a[len]=='.'||a[len]=='?'||a[len]=='!'){ k=0; len=1;a[1]=' ';break; } else k=0; } printf("%d\n",sum);sum=0; } return 0; }
本题解最精彩的部分就是下面我要写的这些(高能预警)
首先,我这道题目被卡的时候我去翻了翻其他过了的小伙伴的AC程序,然后、、、我竟然成功的找了一组数据把他的AC程序打掉了??!!
数据:
1
AA13A 444 Akuvliuvi liugviavdliadAA.
输出应该是1
然后我在评论区发了个帖子求救,有位大佬贴上了他的AC代码,结果、、、又被我hack掉了,还是那组数据
又多了一个AC以后被打掉的。。网址
最后贴上我发评论的那个帖子:帖子
所以,不管是过了还是没过的都可以拿这组数据试一下。同时我希望落谷能改一改这道题目的数据点然后尽快开放下载。。。
- 1
信息
- ID
- 5556
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者