古い Google Code Jam の問題を解決して C++ を練習しようとしています。私が見つけた比較的単純なものは、文字列内の単語を逆にすることです。ここで見つけることができますhttps://code.google.com/codejam/contest/351101/dashboard#s=p1
これまでのところ、私は持っています:
#include<iostream>
using namespace std;
int main(){
int n = 0;
cin >> n;
string rev = "";
string buf = "";
string data = "";
getline(cin, data);
for(int _ = 0; _ < n; _++){
getline(cin, data);
rev = "";
buf = "";
for(char& c : data) {
buf += c;
if(c == ' '){
rev = buf + rev;
buf = "";
}
}
cout << "Case #" << _ + 1 << ": " << buf << " " << rev << endl;
}
return 0;
}
これはかなり速く実行されているようです。time ./reverse < in > /dev/null
前後のケースのテスト ファイルで実行すると、 でコンパイルすると約数秒1.2E6
かかります。3.5
g++ -O3
ベンチマークとして、Pythonでソリューションを作成しました
#!/usr/bin/env python
from sys import stdin, stdout
stdout.writelines(map(lambda n: "Case #%d: %s\n" % (n + 1, ' '.join(stdin.readline().split()[::-1])), xrange(int(stdin.readline()))))
ただし、実行すると、pypy
約数秒time pypy reverse.py < in > /dev/null
しかかかりません。1.95
理論的にpypy
は、C++ で書かれているように、C++ はそれほど高速または高速であるべきではありません。