1. 程式人生 > >做TopCoder應注意什麼

做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程式一樣在類裡的函式裡寫程式了