Google Kickstart在線測試規則以及注意事項


谷歌招聘在如火如荼的進行中,進谷歌都需要經過谷歌kickstart在線測試,然后過了之后還有五輪的面試- -。好吧畢竟你待遇高,你強你有理。。

下面介紹一下進谷歌的第一關google kickstart在線測試規則和注意事項。

google kickstart網址: https://code.google.com/codejam/

(PS. 建議全程連接vpn操作。)

首先你要有一個谷歌賬號,可以是Gmail郵箱賬號,沒有的話注冊一個。

然后進入上面的網址,右上角有一個log in,點了之后等一下,就會跳出谷歌登錄頁面,登錄之后完善一下kickstart所需信息點擊完成即可。

然后大家可以點擊右上角的PAST CONTEST尋找過往的題目自己練練手。

這里先說一下規則:

(完整規則在這里:https://code.google.com/codejam/resources/quickstart-guide#gcj)我這里只是簡單概括一下。

谷歌在線測試不同於以往大家做的各種ACM在線評測那樣,不是讓你不斷提交代碼然后系統給你測試,而是給你數據集讓你自己測試后在本地生成輸出文件進行上傳。

拿2017年C輪測試第一題舉例來說,(網址:https://code.google.com/codejam/contest/4344486/dashboard#s=p0)

點進題目之后會看到有兩個按鈕,(真正在線測試開始的時候按鈕的文字可能會有所不同),

點擊后會出現下載信息,這題下載的文件名是A-small-practice.in,點擊下載。下載完后可以用記事本打開看看,里面的內容就相當於你控制台的輸入了,而我們需要做的就是把這個文件的內容當作輸入,然后提交經過程序處理后的輸出結果,為.out的文件,系統進行判斷你這個.out文件得到的結果是否是正確的,如果正確就顯示correct,否則為incorrect。

對於C++來說,也就是文件的輸入和輸出,代替了你的cin>>和cout<< ,所以忘記了如何進行文件處理的同學可以回去復習一下。

PS. 每一道題都有小數據集和大數據集兩個.in文件可供下載,大數據集的數據范圍一般都比小數據集的范圍更廣,有時候代碼如果不夠精細的話,小數據集沒出現的情況在大數據集中會出現從而造成小數據集正確而大數據集結果錯誤。

下面是我寫的A題處理代碼(注意A-small-practice.in文件需要和程序文件放在同一個文件夾下):

C++ :

#include<iostream>
#include<fstream>
using namespace std;

int main(){
    
   string data;
   int line;
   
   int store[100];
   int origin[100];
   
   ifstream infile; 
   infile.open("A-small-practice.in");   
   ofstream outfile;
   outfile.open("A-small-practice.out");
 
   cout << "Reading from the file" << endl; 
   
   infile >> line;   

   for (int i = 0 ; i < line ; i++){
       
           bool hasA = false;
           infile >> data;

           int length = data.length();    
                              
           cout<< data <<" "; //本代碼中控制台輸出只是為了方便對照,與實際輸出文件並無聯系。 
           //存儲數據 
           for (int j = 0; j<length ; j++){         
            store[j] = (int)data[j] - 65;    //強制類型轉換,將A-Z轉成0-25的數字           
        }
           
           if ( length % 2 == 0 ){              
               
               //處理:
            //正向: 
            origin[1] = store[0];
            for (int m = 3 ; m < length ; m = m + 2){
                
                if (origin[m-2] > store[m-1])
                    origin[m] = store[m-1] + 26 - origin[m-2];
                else
                    origin[m] = store[m-1] - origin[m-2];
            } 
            //反向:
            origin[length-2] = store[length-1];
            for (int m = length-4; m >= 0 ; m = m - 2){
                
                if (origin[m+2] > store[m+1])
                    origin[m] = store[m+1] + 26 - origin[m+2];
                else
                    origin[m] = store[m+1] - origin[m+2];
            } 
            
            cout<<"Case #" << i + 1 << ": " ; 
            outfile<<"Case #" << i + 1 << ": " ; 
            
               for (int j = 0; j<length ; j++){ 
                int zimu = origin[j] + 65;        
                outfile << (char)zimu ;
                cout << (char)zimu ;               
            }
            
        }
           
           
           if ( length % 2 != 0){            
               cout<< "Case #" << i + 1 << ": AMBIGUOUS";
               outfile << "Case #" << i + 1 << ": AMBIGUOUS";                
        }
           
           outfile <<endl;
           cout<<endl;    
                            
   }

   return 0;
}
    
    

看懂了題目之后還是比較簡單的一題。運行代碼,在程序文件夾下就會產生一個A-small-practice.out文件。再到題目所在的網頁里點擊submit后選擇提交,頁面就會顯示correct。對於大數據集的操作就是改一下代碼中的文件名,最后結果依然也會是correct,自此測試完成。

如果正確,Correct顯示在頁面最上方,如圖所示:

注意事項:

1、實際正式測試的時候除了需要提交結果文件,代碼也需要同時提交。

2、多多注意題目中的limit等限制,比方說這個題目明確說了無解的數據集是不會出現的,看清楚了之后能為你省去代碼中很多判斷步驟。

3、正式測試的時候小數據集有無數次下載機會,如果結果錯誤,可以不斷嘗試,只不過每四分鍾換一個小數據集文件,里面內容不一樣。大數據集只有一次下載機會,你提交了之后你也不知道你的結果對不對,只有等整個測試結束之后才會告訴你。

4、可以先在控制台進行部分關鍵數據測試,手動輸入,控制台輸出,看看結果是否有誤,確認一些易錯數據都正確了之后再進行文件的處理,對於調試來說方便了許多。

 

祝大家做題順利~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM