求助站外题
  • 板块学术版
  • 楼主2021zjhs005
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/1/16 13:18
  • 上次更新2024/1/16 17:45:37
查看原帖
求助站外题
1121995
2021zjhs005楼主2024/1/16 13:18

rt,我居然这题都不会。。。~真是个蒟蒻。

求大佬调一下代码(最下面),或者给一下 HACK。

题目

每次英语老师叫我们学英语时,很多同学总会觉得句子越长越南理解。后来,英语老实说:“干脆我们先从最难的学起吧,请同学们把最长的英文句子找出来。”

输入

只有一行字符串,有英文标点符号和英文字母组成,每一句的结束用英语标点 . 来表示。

输出

第一行是输出最长的句子(包括 .),如果有多个最长的句子,则输出最前面的那一句。

第二行输出英文句子的长度。

样例

输入:

We always play together. He is friendly and funny boy. He always helps others.

输出:

He is friendly and funny boy.
29

数据范围

英文文章长度小于等于 10710^7,最长的句子长度不超过 10001000。

我的思路

首先找标点 .。

  • 如果不是,就累加长度,加入新的字符串。

  • 如果是,先消去句首空格,再打擂台,并初始化。

最后输出。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll i,maxn;
string ans,str,s;
int main(){
	getline(cin,s);
	for(i=0;i<s.size();i++){
		str+=s[i];
		if(s[i]=='.'){
			ll len=str.size();
			while((int)str[0]==32&&len){
				str.erase(0,1);
				len--;
			}
			if(len>maxn){
				maxn=len;
				ans=str;
				str="";
			}
		}
	}
	cout<<ans<<endl<<maxn<<endl;
    return 0;
}
2024/1/16 13:18
加载中...