hihoCoder太閣最新面經演算法競賽19

2022-02-27 16:36:40 字數 2907 閱讀 1797

a. 固定乙個方向,兩兩相鄰的點順時針或逆時針構造三個向量,判斷這個點在這個向量的左側還是右側,看看是否在同一側。trick就是點在向量上,對應的情況就是值為0.

1

defdo(p1x, p1y, p2x, p2y, p3x, p3y):

2return (p3x - p1x) * (p2y - p1y) - (p2x - p1x) * (p3y -p1y);

34 t = map(int, raw_input().split('

'))[0]

5while t >0:

6 t -= 1

7 px, py, ax, ay, bx, by, cx, cy = map(int, raw_input().split(''))

8 x, y, z =do(ax, ay, px, py, bx, by), do(bx, by, px, py, cx, cy), do(cx, cy, px, py, ax, ay)

9if (x >= 0 and y >= 0 and z >= 0) or (x <= 0 and y <= 0 and z <=0):

10print

'yes'11

else:12

print'no

'

b.打表規律,發現<=16的時候可以暴搜,>16的時候f(n)=4*f(n-5)(?如果沒記錯的話),矩陣加速一下就行了。

1 #include 2

using

namespace

std;

34 typedef long

long

ll;5

const ll mod =1000000007ll;

6const

int maxn = 10;7

ll n;

8ll ret;

910 typedef struct

matrix

18} matrix;

1920

matrix mul(matrix m1, matrix m2, ll mod) 30}

31}32return

ans;33}

3435

matrix quickmul(matrix m, ll n, ll mod)

40 ans.r =m.r;

41 ans.c =m.c;

42while

(n)

46 m =mul(m, m, mod);

47 n >>= 1;48

}49return

ans;50}

5152

void

dfs(ll n, ll cur, ll sz)

57if(n >= 3) dfs(n-3,cur*2%mod, cur);

58if(n >= 1 && sz) dfs(n-1, (cur+sz)%mod, sz);

59 dfs(n-1,(cur+1)%mod, sz);60}

6162

intmain()

71 matrix x; x.r = 5, x.c = 1

;72 x.m[1][1] = 81, x.m[2][1] = 64, x.m[3][1] = 48, x.m[4][1] = 36, x.m[5][1] = 27

;73 matrix p; p.r = p.c = 5

;74 memset(p.m, 0, sizeof

(p.m));

75 p.m[1][5] = 4;76

for(int i = 2; i <= 5; i++) p.m[i][i-1] = 1

;77 p = quickmul(p, n-15

, mod);

78 p =mul(p, x, mod);

79 cout << p.m[1][1] <81return0;

82 }

c.對於trie上的每個節點u,求最小的整數x滿足 節點u對應的字串(trie上root->u的路徑) 是 s[1..x]的子串行。

1 #include 2

using

namespace

std;34

const

int maxn = 10100;5

const

int maxm = 100100;6

const

int maxc = 30;7

8 typedef pairpii;

9 typedef struct

trie

20void insert(const

char*str)

28 val[u] =max(val[u], n);29}

30void dfs(int x, int

u) 42}43

}44}trie;

4546

intn;

47char

tmp[maxm];

48trie trie;

4950

intmain()

58 scanf("%s"

, tmp);

59 trie.s =tmp;

60 trie.dfs(0, 0

);61

int ret = 0;62

for(int i = 0; i <= trie.sz; i++) 67}

68 printf("

%d\n

", ret);69}

70return0;

71 }

微軟最新面經11 6

一面 自我介紹 聊專案及相關知識點 半個小時 矩陣原地旋轉,並且證明演算法的正確性 二面 英語自我介紹 聊專案 返回兩個有序陣列中第k大的值,時間複雜度要求o logn lead面 簡單介紹一下專案的亮點,稍微聊了下相關的知識點 英語分享日常生活,三分鐘 個人優缺點介紹 給乙個陣列,可修改乙個值,求...

面經 葫蘆面經

1 給定乙個n位數,例如12345,從裡面去掉k個數字,得到乙個n k位的數,例如去掉2,4,得到135,去掉1,5,得到234。設計演算法,求出所有得到的 n k位數裡面最小的那乙個 2 找明星 n個人中,只有乙個明星 明星不認識其他所有的人,而其他人 都認識明星,這些人中也可能相互認識。你每次只...

NOKIA筆經 面經

今天應該是畢業找工作生涯的最後一次面試了,發個筆經面經,為後來人 鋪路.我面的是radio network planning。筆試 海選,通過chinahr出的一組能力測試題篩選。好像篩了不少人。題目包括詞語填空,閱讀理解,圖形,數字題,基本數學題,題。一面 面試官為應聘職位的部門經理。基本上為中文...