做TopCoder應注意什麼
本文獻給那些把c當作自己主要程式語言而且有一定c++基礎,想做topcoder的人
1.topcoder的題目不需要標準輸入輸出cin,cout,scanf,printf,所有的引數都是通過函式引數傳遞的形式輸入
輸出通過return返回。例如:
一般topcoder題都有如下的說明:
Class: Substitute
Method:getValue
Parameters:String, String
Returns:int
Method signature:
int getValue(String key, String code)
在這裡你需要建一個類,名字叫Substitute,類裡有一個函式
int getValue(String key, String code)
資料通過函式引數key和code傳入,類似輸入
通過return 返回,類似輸出
所以topcoder的題都可以有這樣一個模板:
#include <string> #include <vector> using namespace std; class //這兒加上題目中具體的類名 { public: //這兒加上題目中具體的函式 };
2.vector類
topcoder的陣列是用vector這個類定義的,關於這個類常用的函式有size( ),功能像字元陣列的strlen一樣,獲取陣列的長度。
比如你要定義一個int型陣列你可以:vector <int> array;
array.size(); //獲取array的長度
定義一個字元陣列你可以:vector <char> array;
array的預設長度是0
其他型別以此類推
還有一點需要注意,那就是用vector定義的陣列可以任意長,而且可以像c的陣列那樣訪問具體元素
比如你可以通過array[0]訪問array的第一個元素,通過array[i]訪問array的第i個元素
3.string類
在topcoder裡字串是通過用string定義的變數傳入函式的,也是通過string定義的變數返回的
它也有一個常用函式size( ),用來獲取字串長度。
它也可以像c裡的陣列那樣訪問字串裡的每個字元。
string s = "Hello";
s[0] = 'H'; //s變成了"hello"
以下是一個具體的topcoder程式,不必理會程式具體功能,只是告訴你topcoder的程式應該是什麼格式
#include <string>
#include <vector>
using namespace std;
class Chooser {
public:
int numSets(vector<int> a, vector<int> b, vector<int> c) {
int sum = 0;
for (int i = 0; i < a.size(); i++) {
for (int j = 0; j < b.size(); j++) {
for (int k = 0; k < c.size(); k++) {
int n = a[i] + b[j] + c[k];
if (n >= 60 && n <= 75) {
sum++;
}
}
}
}
return sum;
}
};
除去模板,你會發現在函式體裡的具體實現,語法和c差不多
有了上述知識,你可以像寫c程式一樣在類裡的函式裡寫程式了