这题大水为什么会错?

6. 最长最短单词

题目ID:9799100分

最新提交:

Time Limit Exceeded

0 分

历史最高:

Time Limit Exceeded

0 分

时间限制: 1000ms

空间限制: 524288kB

题目描述

输入 11 行句子(不多于 100100 个单词,每个单词长度不超过 100100,以.作为结尾),只包含字母、空格、逗号和句号。单词由至少一个连续的字母构成,空格、逗号和句号都是单词间的间隔。

输出第 11 个最长的单词和第 11 个最短单词。

输入格式

输入数据:一行句子。

输出格式

第 11 行,第一个最长的单词。

第 22 行,第一个最短的单词。

样例

Input 1

I am a student,i am studying Programming language C in Peking University.

Output 1

Programming I

#include<bits/stdc++.h>
using namespace std;
int ans1=0,ans2=0x3f3f3f,cnt;
string s,s1,s2,s0;
int main()
{
	getline(cin,s);//一整行输入
	for(int i=0;i<s.length();i++)
	{
		if(s[i]==' '||s[i]==','||s[i]=='.')//判定单词末尾(注意中英符号区分)
		{
			if(cnt>ans1)//最大值打擂台
			{
				s1=s0;
				ans1=cnt;
			}
			if(cnt<ans2)//最小值打擂台
			{
				s2=s0;
				ans2=cnt;
			}
			cnt=0;
			s0.clear();//清除当前单词
		}
		else
                {
                    s0+=s[i]; //一般情况(记录单词字母以及其个数)
                    cnt+=1;
                }
     	
	}
	cout<<s1<<endl<<s2<<endl;//一般输出
    return 0;
}

还有这个:

10. 单词统计

题目ID:1381100分

最新提交:

Memory Limit Exceeded

90 分

历史最高:

Memory Limit Exceeded

90 分

时间限制: 1000ms

空间限制: 65536kB

题目描述

输入一行文字,统计其中有多少个单词。单词之间是用一个或多个空格间隔的。

输入格式:

一行文字,可多达10000000个。

输出格式:

单词个数。

样例输入:

I am a boy.

样例输出:

4

数据范围:

见题目

时间限制:

1000

空间限制:

65536

#include<bits/stdc++.h>
using namespace std;
string s;
int a[10000005];
int main(){
	getline(cin,s);
	int len=s.size(),j=1,l=0,f=0;
	for(int i=0;i<len;i++){
		if(s[i]==' '&&f!=1){
			a[j]=i-l;
			l=i+1;
			j++;
			f=1;
		}else if(s[i]==' '&&f==1){
			l=i+1;
		}else if(s[i]!=' '){
			f=0;
		}
	}
	a[j]=len-l;
	cout<<j;
}
3 个赞