"TCHS SRM 1" 答案 及 代码
由于题目涉密以及英文, 不方便一一列出, 希望能坚持下去;
TopCoder具体网址:http://community.topcoder.com/
250-points: 雷达识别均值问题:
Code:
#include <string>
#include <vector>
#include <cstddef>
using namespace std;
class SpeedRadar {
public:
double averageSpeed (int minLimit, int maxLimit, std::vector <int> readings);
};
double SpeedRadar::averageSpeed (int minLimit, int maxLimit, std::vector <int> readings){
size_t cnt = readings.size();
size_t lmtCnt = 0.1*cnt;
double total(0.0);
size_t infCnt(0);
for (const auto& i : readings){
if(i<minLimit || i>maxLimit){
infCnt++;
if(infCnt > lmtCnt){
total = 0.0;
break;
}
}else{
total += i;
}
}
return total/(cnt-infCnt);
}
500-points: 语言的字母规律:
Code:
#include <string>
#include <vector>
#include <array>
#include <numeric>
#include <cmath>
#include <limits>
#include <cstddef>
using namespace std;
class SymbolFrequency {
public:
double language(vector <string> frequencies, vector <string> text);
};
double SymbolFrequency::language(vector <string> frequencies, vector <string> text){
int asc(0); //ascii
double cnt(0.0); //the count of alphabets
double sum(0.0); //each language difference
double result = std::numeric_limits<double>::max(); //result
std::array<double, 26> alpText = {0};
for(const auto& str : text){
for(const auto& c : str){
asc = static_cast<int>(c);
++alpText[asc-97];
}
}
cnt = std::accumulate(alpText.begin(), alpText.end(), 0);
std::array<double, 26> alpFreq = {0};
for(const auto& fre : frequencies){
for(auto i=fre.cbegin(); i!=fre.cend(); i+=3){
asc = static_cast<int>(*i);
std::string fig = std::string(i+1, i+3);
alpFreq[asc-97] = std::stod(fig)*cnt/100.0;
}
for(size_t i=0; i<26; ++i){
sum += std::pow(std::abs(alpFreq[i] - alpText[i]), 2.0);
}
result = (sum < result) ? sum : result;
sum = 0; //reset
}
return result;
}