|
常用链接
留言簿(4)
随笔分类
随笔档案
搜索
最新评论

阅读排行榜
评论排行榜
Powered by: 博客园
模板提供:沪江博客
|
|
|
|
|
发新文章 |
|
|
类似手机智能英文输入法
我的算法很复杂,虽然在自己电脑上实现了,但是在OD上居然出现了runtime error。。。
先把说有输入的单词按使用频率排序,然后根据输入数字逐个查找。。用了n个循环。。。
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
using namespace std;


int main()
  {
 char key[9][4]= { {'_'}, {'a','b','c'}, {'d','e','f'}, {'g','h','i'}, {'j','k','l'},
 {'m','n','o'}, {'p','q','r','s'}, {'t','u','v'}, {'w','x','y','z'}};
int m,n;
string s;
int pri;
vector<string> input;vector<string> output;
vector<int> priority;vector<string> innum;
vector<int> order;vector<int> scenum;
cin>>m;
while (m>0)
 {
innum.clear();
input.clear();
priority.clear();
order.clear();
cin>>n;
while (n>0)
 {
cin>>s>>pri;
input.push_back(s);
priority.push_back(pri);
n--;
}
int max,maxn;
int *used=new int[(int)priority.size()];
memset(used,0,priority.size()*sizeof(used));
for (int i=0;i<(int)priority.size();i++) //排列优先级
 {
if (used[i]==0)
 {
if (priority[i]>max)
 {
max=priority[i];
maxn=i;
}
else if (priority[i]==max)
 {
if (input[i]>input[maxn])
 {maxn=i;
}
}
}
if (i==(int)priority.size()-1)
 {
if (maxn==-1)
 {break; }
order.push_back(maxn);
used[maxn]=1;
i=-1;max=-1;maxn=-1;
}

}
delete [] used;
int count=0;
int num;
string fail="MANUALLY";
cin>>num;
while (num>0)
 {
cin>>s;
bool match=true;
for (int i=0;i<(int)s.length();i++)
 {
if (s[i]=='1')
 {
output.push_back("\n");count++;
break;
}
for (int k=0;k<(int)order.size();k++)
 {
match=true;
if(i<=input[order[k]].length()-1)
 {
for (int j=i;j>=0;j--)
 {
if (strchr(key[s[j]-'1'],input[order[k]][j])==NULL) //查找匹配,任何一位不匹配则停止
 {
match=false;
break;
}
}
if (match==true)
 {
string cpy="";
for (int l=0;l<i+1;l++)
 {
cpy+=input[order[k]][l];
}
output.push_back(cpy);count++;
break;
}
}
}
if (match==false)
 {
output.push_back(fail);count++;
}
}
num--;
}
scenum.push_back(count);
m--;
}
int snum=0;
for (size_t i=0;i<output.size();i++)
 {
if (i==0)
 {
cout<<"Scenario #1:"<<endl;
}
if (i==scenum[snum])
 {
cout<<"\nScenario #"<<snum+2<<":"<<endl;
snum++;
}
if (output[i]=="\n")
 {
cout<<output[i];
}
else
cout<<output[i]<<endl;
}
}
PS:貌似高手是用什字典树,我听都没听过,唉。。。继续学习算法了
|
|