我在 CodinGame.com 上解决了这个问题,我设法编写了一个代码,通过了最后一个测试用例(一个非常大的测试用例)的系统测试。但是在我的笔记本电脑上编译时,我得到的输出是 0 而不是 57330892800,这是代码从他们的机器上给我的。我使用 Visual Studio 2012 Express 和 Dev C++ 4.9.9.2 编译。
我使用了递归函数,所以如果堆栈内存用完,我预计会出现堆栈溢出错误,但没有错误,什么都没有,只是输出 0。为什么在我的系统上发生这种情况而它工作得很好网站的机器?是什么原因造成的,因为我怀疑它是堆栈溢出?
#include<iostream>
#include<algorithm>
#include<stack>
#include<string>
#include<map>
#include<set>
#include<vector>
using namespace std;
typedef long long LONG;
string X[]={".-","-...","-.-.","-..",
".","..-.","--.","....",
"..",".---","-.-",".-..",
"--","-.","---",".--.",
"--.-",".-.","...","-",
"..-","...-",".--","-..-",
"-.--","--.."};
map<string, int> dict;
string morse(const string ret){
string s;
for(char c : ret) s+=X[c-'A'];
return s;
}
LONG decode(int start, string &word, vector<LONG> &mem){
if(start == word.size()) return 1;
else if(mem[start] != -1) return mem[start];
LONG res = 0;
string s;
for(int i=0; i<19*4 && start+i<word.size(); i++){
s+=word[start+i];
auto curr = dict.find(s);
if(curr!=dict.end()) res+=curr->second*decode(start+i+1, word, mem);
}
mem[start]=res;
return res;
}
int main(){
string word;
cin>>word;
int n; cin>>n;
for(int i=0; i<n; i++){
string s;
cin>>s;
dict[morse(s)]++;
}
vector<LONG> mem(word.size(), -1);
cout<<decode(0, word, mem)<<endl;
}