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、可以先在控制台进行部分关键数据测试,手动输入,控制台输出,看看结果是否有误,确认一些易错数据都正确了之后再进行文件的处理,对于调试来说方便了许多。
祝大家做题顺利~