| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:真不知道為什麼會Time Limit Exceeded,無語了In Reply To:真不知道為什麼會Time Limit Exceeded,無語了 Posted by:nowaits at 2014-04-19 19:23:06 > #include <iostream>
> #include <list>
> #include <string>
> #include <map>
> #include <algorithm>
> // #include <Windows.h>
> inline void translate(const std::map<char, char>& table, const std::string& input, std::string& output);
> int main() {
> int n = 0;
>
> std::cin>>n;
>
> // DWORD t = GetTickCount();
> std::list<std::string> strs;
> std::map<std::string, int> mv;
>
> std::map<char, char> table;
> table['A'] = table['B'] = table['C'] = '2';
> table['D'] = table['E'] = table['F'] = '3';
> table['G'] = table['H'] = table['I'] = '4';
> table['J'] = table['K'] = table['L'] = '5';
> table['M'] = table['N'] = table['O'] = '6';
> table['P'] = table['R'] = table['S'] = '7';
> table['T'] = table['U'] = table['V'] = '8';
> table['W'] = table['X'] = table['Y'] = '9';
>
> std::string input;
> std::string output;
>
> while(std::cin>>input) {
> if(n -- > 0) {
> translate(table, input, output);
>
> strs.push_back(output);
>
> mv[output] ++;
> } else {
> break;
> }
> }
>
> // std::cout<<"---"<<GetTickCount() - t<<std::endl;
>
> {
> strs.clear();
> std::map<std::string, int>::const_iterator it = mv.begin();
> std::map<std::string, int>::const_iterator end = mv.end();
> while(it != end) {
> strs.push_back(it->first);
> it ++;
> }
>
> strs.sort();
> }
>
> std::list<std::string>::const_iterator it = strs.begin();
> std::list<std::string>::const_iterator end = strs.end();
> bool has_duplicate = false;
> while(it != end) {
> if (mv[*it] > 1) {
> std::cout<<*it<<" "<<mv[*it]<<std::endl;
> has_duplicate = true;
> }
> it ++;
> }
>
> if (!has_duplicate)
> std::cout<<"No duplicates. "<<std::endl;
>
> // std::cout<<GetTickCount() - t<<std::endl;
> return 0;
> }
>
> inline void translate(const std::map<char, char>& table, const std::string& input, std::string& output) {
> output.resize(8);
> char* pHeader = &output[0];
> char* p = pHeader;
>
> for(int i = 0; i < (int)input.size() && p - pHeader < 8; i ++) {
> char c = input[i];
> if (c >= '0' && c <= '9') {
> *(p++) = c;
> } else if (c >= 'A' && c <= 'Z') {
> std::map<char, char>::const_iterator it = table.find(c);
>
> if (it != table.end())
> *(p++) = it->second;
> }
>
> if (p - pHeader == 3)
> *(p++) = '-';
> }
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator