網易互娛2020校招遊戲研發筆試題

2021-09-27 06:06:06 字數 3808 閱讀 6656

第一題:判斷乙個數的二進位制是否為回文串(ac)

方法一:存成陣列之後比較

#include

#include

#include

#include

using namespace std;

int t,x,cnt;

int num[

111]

;int

main()

int flag=1;

for(

int i=

0;i2;i++)}

if(flag) cout<<

"yes"

;else cout<<

"no";}

}

方法二:利用棧和佇列

#include

using namespace std;

stack<

int>st;

queue<

int>que;

intmain()

bool flag =0;

while

(!st.

empty()

)if(flag) cout<<

"no\n"

;else cout<<

"yes\n";}

}

第二題:判斷二叉樹每層的和是否為遞增的0)

這道題沒有通過,因為寫的時候光顧著去建樹了。

牛客網大神思路說沒必要建樹。其實建樹也只是為了找根節點而已。

根節點可以利用所有的節點都有父親節點這個特點,那麼標記一下每個點有沒有父親節點,唯一乙個沒有父親節點的點就是根節點。也可以利用入度為0的特性。把所有的輸入index儲存下來求和,然後求有入度點的和,相減就可以得到根節點的編號。

同樣,沒有必要去層序遍歷,如果遍歷到某個點x的深度為d,那麼sum[d] += val[x],這樣的話只需要正常的dfs,就可以記錄下每層的和,d一定不會超過節點數量。

#include

using namespace std;

const

int n =

1005

;bool du[n]

;int n;

int sum[n]

,m;struct node

}tree[n]

;void

dfs(

int now,

int dep)

intmain()

int s =-1

;for

(int i=

0;im =0;

dfs(s,1)

; bool flag =0;

for(

int i=

2;i<=m;i++)}

if(flag ==

0) cout<<

"yes\n"

;else cout<<

"no\n";}

}

第三題:喝咖啡(ac)

另乙個**

#include

#include

#include

#include

using namespace std;

int t,k,m;

int num[33]

;int ans=0;

intmain()

ans=0;

if(m==0)

printf

("%d\n"

,ans)

;continue;}

int temp=num[0]

;while

(temp>=1)

for(

int i=

1;itemp=num[m-1]

+k;while

(temp<=30)

printf

("%d\n"

,ans);}

}

第四題:在0-1矩陣中找到最大的十字架(部分通過)

在乙個01矩陣中找乙個最大的九宮格

123

456789

其中1-9都是等邊長的正方形,且1、3、7、9全0,其餘部分全1,輸出左上和右下的座標,如果有多個,輸出最左上的乙個

因為n,m<2000,t<10,而時限是1秒,所以說我們要嘗試找出複雜度為n*m*t*log(min(n,m))的演算法

首先的是乙個問題,如何判斷九宮格合法,即判斷1、3、7、9全0,其餘部分全1

實際上我們可以乙個區域乙個區域的去判斷,判斷這個區域是不是全0或者是全1,如何這個問題就變成了o(1)的時間內求乙個矩形區域和的問題,這個問題實際上就是字首和的二維形式

sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+num[i][j];

但是這樣去做的話,複雜度還是t*n*m*min(n,m)的,還是不夠

而根據原題目的描述,我們可以發現實際上以乙個點為左上角頂點,實際上最多只能找出乙個合法區域,因為我們對於任意點找的區域必須滿足這2點:

1、左上角的k*k的區域全0

2、左上角的2k*2k的區域除去那k*k的區域外全1

實際上我們只需要對於乙個點找乙個以該點為頂點的最大全零正方形,然後以這個正方形的邊長x判斷另外八個區域就行了

如果我們找的邊長小於x。則不滿足條件2

如果我們找的邊長大於x,則不滿足條件1

對於這個邊長x的尋找,我們就可以利用二分搜尋的方法來確定了,現在整體的複雜度就變成了nmt*log(min(n,m))

牛客網大神**

觀察這個圖形,我們會發現如果乙個正方形是合法的,他中間的黑塊(x_1,y_1,x_2,y_2)(,他的左上角的點(x_1-1,y_1-1)一定是白色,右下角的點(x_2+1,y_2+1)也一定是白色,那我們可以o(n2)列舉每個點,看看它能不能作為(x_1,y_1)如果可以,找到(x_2,y_2)。去判斷一下九個塊是不是滿足題目給的條件

判斷乙個塊是不是全0或者全1,我們可以預處理出來矩陣字首和,求子矩陣和可以差分一下,那我們只需要判斷一下子矩陣和是不是0或者是不是矩陣面積即可,具體看**。

(我在列舉9塊的那裡寫得太醜了)

#include

using namespace std;

int n,m;

char s[

2005][

2005];

int sum[

2005][

2005];

int a,b,c,d,ans=0;

bool cal

(int a,

int b,

int c,

int d,bool flag)

void

solve

(int bx,

int by)

else

if(ans == lenth)

return;}

intmain()

for(

int i=

1;i<=n;i++)}

ans =0;

a = b = c = d =-1

;for

(int i =

2;i} cout<" "<" "<" "<"\n";}

}

20190822網易互娛遊戲研發

2019.8.22 網易互娛遊戲研發工程師 一面,45分鐘 測試 size t strlcpy const char src,char dest,size t size size表示目的緩衝區大小,把src拷貝到dest中,保證不溢位,並且目的緩衝區是乙個完整的c串 自我介紹 由於簡歷中沒有c c ...

面經 網易互娛 遊戲研發 offer

拿到位元組的意向書後閒來無事,多面幾個看看自己到底什麼水平。結果一不小心拿到了網易互娛的offer,薪水真是香,比位元組還高了幾千,沒想到會這麼高,看到薪資時驚呆我了。但是慎重考慮後還是拒了,選了位元組。純粹只是因為覺得自己並沒有那麼沉迷遊戲,還是不要入遊戲坑了。網易互娛本身誠意真是很足。今年網易互...

網易互娛遊戲研發工程師筆試

第三題 流量統計問題,二分查詢區間 include include include include using namespace std int main cin m for int i 0 i m i return 0 第四題 三殺,得到殺死每個小乖的時間,然後考慮每種擊殺順序的最小怪傷害 in...