POJ 3250

題敘

https://vjudge.net/problem/POJ-3250
可見杆問題
給一群杆子的高度,求在每根杆子上向右看能看到的杆子數量總和
定義能看到是你所在的桿杆和該桿杆之間的所有桿杆高度都小於你所在的桿杆的高度

想法

觀察能看到其他杆子的集合所形成的序列可以發現是呈現 遞減 的狀態
因此我們只要能維護一個嚴格遞減的序列,剩下的就必定會是能看到其他人的杆子
因為這裡的狀態是先進後出,跟stack一樣,所以選擇stack
每次將stack內所剩餘的元素數量加總即可求解

閱讀全文 »

UVa673

題敘

http://domen111.github.io/UVa-Easy-Viewer/?673
給一個只包含 ( ) [ ] 的字串
定義合法的字串需要符合以下任一條件

  1. 字串為空字串
  2. 如果 $A$ 和 $B$ 都為正確的運算式,則 $A B$ 也為正確的運算式,
  3. 如果 $A$ 為正確的運算式,則 $(A)$ 及 $[A]$ 都為正確的運算式。
    求該字串是否為合法字串

想法

閱讀全文 »

Zerojudge a007

題敘

https://zerojudge.tw/ShowProblem?problemid=a007
多筆測資,給一個數,求是否為質數

想法

對於一個數 $N$ ,只需要判斷 $2$ ~ $\sqrt{N}$ 的質數,是否有能整除 $N$ 的即可
如果有,則非質數
預先將 $0$ ~ $\sqrt{2147483647}$ 的質數表建立起來,對於每次輸入再一一判斷即可

閱讀全文 »

AIS3 2020 pre-exam write-up

今年第一次打AIS3 pre-exam,有很多第一次遇到的題目類型
稍微整理了一下我有解的題目的解題過程,歡迎大家一起討論~

Misc

Piquero

347 solves

閱讀全文 »

TOJ470

題敘

https://toj.tfcis.org/oj/pro/470/
給每天訓練的成效值,在不能練續兩天訓練的前提下,問最多能獲得多少成效值

想法

每天都有取或不取兩種選擇
定義DP式 $DP[i][j]$ 表示第 $i$ 天選或不選($j=0$或$j=1$)的最大成效值
可得轉移式
$DP[i][1] = max(DP[i-1][0]+arr[i], DP[i][1])$
$DP[i][0] = max(DP[i-1][1], DP[i-1][0])$
不過實作後會發現到每次會影響到的只有上一個狀態,所以只需要記錄前一個狀態即可

閱讀全文 »

UVa108

題敘

http://domen111.github.io/UVa-Easy-Viewer/?108
給一個 $n \times n$ 的陣列,求最大的子區域元素和

想法

枚舉直行的左界右界,從最上列開始往下加,每次更新最大答案
在列的部分希望能做到 $O(1)$ 求解
可以想到前綴和,將每列的元素與前一個元素相加
$sum[i][j] = sum[i][j-1] + arr[i][j]$
如此一來當我們想求第 $i$ 列的 $j$~$k$行元素總和
$sum[i][k]-sum[i][j-1]$即可得解

閱讀全文 »

UVa11879

題目

http://domen111.github.io/UVa-Easy-Viewer/?11879
給一數字 $N$ $(1 \leq N \leq 10^{100})$
求該數字是否為17的倍數

想法

不必理會題目中給的方式
可以直接模擬一次做除法的樣子

每次做除法就是加入一個位數,留下跟除數相除的餘數繼續步驟
如果做到最後餘數為0,則即為答案
數字部分可以用字串儲存

閱讀全文 »