首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

UVa 409 WA多谢

2013-08-09 
UVa 409 WA谢谢题目地址:http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pagesh

UVa 409 WA谢谢
题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=6&problem=350&mosmsg=Submission+received+with+ID+12131129
意思就是寻找含给定单词个数最多的句子。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
struct MyStruct
{
string str;
string str1;
int num;
};
int main()
{
MyStruct MS[1000];
int n,m;
vector<string> svec;
int i,j;
int cas=1;
int maxnum;
while(cin>>n>>m)
{
maxnum=0;
svec.clear();
for(i=0;i!=n;++i)
{
string str;
cin>>str;
svec.push_back(str);
}
getchar();
for(i=0;i!=m;++i)
getline(cin,MS[i].str1);
for(i=0;i!=m;++i)
{
for(j=0;j!=MS[i].str1.size();++j)
if(MS[i].str1[j]>='A'&&MS[i].str1[j]<='Z')
MS[i].str+=MS[i].str1[j]-'A'+'a';
else
MS[i].str+=MS[i].str1[j];
}
for(i=0;i!=m;++i)
{
MS[i].num=0;
string::iterator begin=MS[i].str.begin();
string::iterator end=begin+1;
while(true)
{
for(;end!=MS[i].str.end()&&(*end)>='a'&&(*end)<='z';++end);
string stri(begin,end);
vector<string>::iterator iter=find(svec.begin(),svec.end(),stri);
if(iter!=svec.end())
MS[i].num++;
for(;end!=MS[i].str.end()&&((*end)<'a'||(*end)>'z');++end);
begin=end;
if(end!=MS[i].str.end())
++end;
if(MS[i].num>maxnum)
maxnum=MS[i].num;
if(begin==MS[i].str.end())
break;
}
}
cout<<"Excuse Set #"<<cas++<<endl;
for(j=0;j!=m;++j)
if(MS[j].num==maxnum)
cout<<MS[j].str1<<endl;
cout<<endl;

}
return 0;
}

[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:


>也只把它当作一次来看是吗?
英语啊英语。each occurrence considered separate incidence。出现几次算几次。

那我中间那个程序就是出现几次算几次的啊....

你同一个单词出现多次的时候只算了一次。

您是不是看错了,我是从借口中找出每个单词,然后去单词表中比对。
不是把单词表中的单词去借口中比对

那么你确定输入的keyword里没有重复?

热点排行