程序員進階之算法練習(十五)

前言

有朋友推薦一個新的算法練習網站leetcode,說北美的公司招人都是400題起步,國內公司招聘也經常用到,上海的尤其多。
很有意思,可以花點時間做做leetcode,看看題目質量。
這次更新的仍然是CodeForces的Contest710

正文

A

題目鏈接
題目大意
一個8*8的棋盤,輸入一個點表示國際象棋中的king的位置,求king能行動的格子數量;


輸入兩個字符,表示列和行。 列是'a'到'h',行是1到8。

Example

input

e4

output

8

題目解析
題目較簡單,看如何實現比較方便。
列-'a'得到索引x;
行-'1'得到索引y;
特判當king在邊界的時候和同時在兩個邊界的時候。

B

題目鏈接
題目大意
輸入n個x軸上的點,輸出和n個點距離最近的點,如果有多個點,輸出最左邊的那個點。
n (1?≤?n?≤?3 * 1e5)
x[i] (?-?1e9?≤?x[i]?≤?1e9)

Example

input

4
1 2 3 4

output

2

** 題目解析**
對點排序,易知最后的點在最中間。

對于在[A, B]中的點x,易知x到A和B的距離是固定;
那么對于[A, B, C]的最優解,必然是在B;
同上,在[A,B,C,D]中,點x到A和D的距離是固定的,同時與x到[B, C]的最優解的重疊。
類推,得到答案就是排序完最中間靠左邊的點。

C

題目鏈接
題目大意
輸入一個奇數n,輸出一個n*n的矩陣,矩陣內數字從1到n*n。
矩陣的要求是行、列、對角線的和都是奇數。
n (1?≤?n?≤?49)

Examples

input

1

output

1

input

3

output

2 1 4
3 5 7
6 9 8

題目解析
我們把1到n*n的數字抽象成0,1.(根據奇偶性)
我們來看 n=3的時候
010
111
010

問題是當n=5的時候,如何構造?
已知,n=3的矩陣,那么只要保證n=3外面的矩陣行列和都是偶數就行。
1 010 1

0 010 0
1 111 1
0 010 0

1 010 1

那么題目可以變成這樣一圈圈的去構造;
并且為了方便,從中心開始構造最為簡單。

E

題目鏈接
題目大意
構造n個'a'字符,x為insert/delete 'a'一次的代價,y為復制粘貼一次的代價。
n, x and y (1?≤?n?≤?107, 1?≤?x,?y?≤?109).

Examples

input

8 1 1

output

4

input

8 1 10

output

8

題目解析:
動態規劃。
dp[i] 表示構造i個字符的最優解。
對應三種可能,三個狀態轉移。
dp[i] = min(dp[i], dp[i + 1] + x); 刪除
dp[i + 1] = min(dp[i + 1], dp[i] + x); 增加
dp[i * 2] = min(dp[i * 2], dp[i] + y); 雙倍

1 2 4 8 16 13 26 52 刪除3次,double 6次
1 2 4 6 12 13 25 52 增加3次,double 6次

F

題目鏈接
題目大意
m個操作。
操作1,把一個字符串s放入集合D,每次插入不同;
操作2,把一個字符串s從集合D刪除,保證有值;
操作3,詢問一個字符串x在集合中子串的數量。
m (1?≤?m?≤?3·1e5)

Examples

input

5
1 abc
3 abcabc
2 abc
1 aba
3 abababc

output

2
2

題目解析:
題目有一個很重要的性質:每次插入不同。
于是可以插入建一個自動機,刪除建一個自動機,相減即可。

查找函數再引入一個dp值,如果訪問一次,就記錄當前值。這樣每個點就只訪問一次
build函數,dp值=-1 比較關鍵
這里的字典樹要引入一個flag來標志是否真的有孩子。(build之后,及時字典樹沒有孩子,ch指針也會指向fail指針)死循環了幾次
插入和更新,在引入一個flag,有更新之后再重新build

如果題目數據更強:(隊友提供的神優化)
再引入logN的優化,建logN個自動機,分別存放1、2、4、8等個自動機。

總結

A、B是簡單題,C是構(腦)造(洞)題,E是動態規劃,F是AC自動機。
新年快樂~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,768評論 0 33
  • 前言 最近來公司面試的開發者很多,經驗從1、2年,到5、6年都有,大都不堪重用。或許在一些程序員眼里,能實現功能,...
    落影loyinglin閱讀 3,851評論 2 25
  • 前言 轉眼已經到5月,可是我還沒訂17年的計劃,真是悲傷的故事。今年還是想花點時間,玩玩題目。題目不會太簡單,也不...
    落影loyinglin閱讀 892評論 0 3
  • 自從上次五官爭功后,那手指也想出爭出個高低,于是就在這:“是我!”“是我!”“我才是第一!”的聲音中拉開了...
    零方程閱讀 487評論 0 1
  • 從老家回來,群里一個女孩加了我微信。沒有說話。夜里12點半,我看了她朋友圈和她的文章。深深地被那些細膩、敏感的思緒...
    曠野里的樹兒閱讀 399評論 7 10