有段时间颇爱编程竞赛题,如Google发起的
Codejam等。一者多见识些问题,二者时常写写C++代码,以免手生。子曰:学而时习之,不亦说乎。
Codejam还是不错,涉及到的知识范围较广,还可顺便练练英语阅读。不过竞赛毕竟是竞赛,有些东西还是可以模式化。比如它的输入与输出格式都不变,何不写一个模版代码文件处理输入输出?这样不但能更专心于如何解决问题,亦可节约时间。
以下是在下用过的代码:
//============================================================================
// Name : codejamtest2.cpp
// Author : festony
// Version :
// Copyright :
// Description : Codejam test template source code
//============================================================================
#include <iostream>
#include <fstream>
#include <sstream>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
static string process(int caseNum, fstream & in) {
char buf[10240];
string temp_str = "";
string result = "";
sprintf(buf, "Case #%d: %s\n", caseNum + 1, temp_str.c_str());
result.append(buf);
return result;
}
int main() {
char buff[10240];
while(true) {
cout << "Input?";
cin >> buff;
if(buff[0] == 'n' || buff[0] == 'N') {
break;
}
int caseNum = 0;
fstream in("C:\\codejamtest\\testin.txt");
fstream out("C:\\codejamtest\\testout.txt", ios_base::out | ios_base::trunc);
in >> caseNum;
in.ignore(256, '\n');
char buf[10240];
string result = "";
for(int i=0; i<caseNum; i++) {
result.append(process(i, in));
}
cout << result;
out << result;
in.close();
out.close();
}
return 0;
}
或有谬误及可改进之处。输出会直接写入testout.txt,调试信息可用cout输出。
也许我该把codejam中常用的数据结构和算法也写出来?虽有重造轮子之嫌,但是多写写代码总不是坏事。