由于题目涉密以及英文, 不方便一一列出, 希望能坚持下去;
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; }