Zerojudge a007

題敘

https://zerojudge.tw/ShowProblem?problemid=b542
有一群人各有一個身高,求任兩人間身高差為 $k$ 的情況是否存在

想法

先將身高進行排序
那麼每次只須要維護序列的左界與右界,判斷兩者的高度差
如果大於 $k$ 就表示左界要再提升
如果小於 $k$ 就表示右界要再提升
查詢直到差值為 $k$ 即得解

閱讀全文 »

TOJ 9

題敘

https://toj.tfcis.org/oj/pro/9/
給一張圖,有兩種遍歷方式,給定起點與終點高度,求兩種遍歷方式的時間差
終點為該圖的最低高度點,可能有多個

  1. 坐下坡車
    每經過一條路需花 $1$ 分鐘
    每次只能走向下最陡的路
    如果四周都比該點高,則無法通行
  2. 走路
    每經過一條路需花 $6$ 分鐘
    想怎麼走就怎麼走

想法

閱讀全文 »

題敘

https://tioj.ck.tp.edu.tw/problems/1235
同數獨問題不過元素改成 $R O Y G B I P L W$
問空格應填入甚麼元素

想法

記錄每行、每列、每個九宮格有哪些元素已經被使用
接著DFS每個空著的元素,枚舉是否有可能是答案

Code

閱讀全文 »

題敘

http://domen111.github.io/UVa-Easy-Viewer/?907
在一趟路途中總共過了 $k$ 天晚上,也就是 $k+1$ 天
在 $n$ 個暫停點之間加上起點與終點共包含 $n+1$ 條路連接兩兩暫停點,每個路徑都有一個距離
求在經過 $k$ 天晚上的情況下,一天行走距離的最小值為多少

想法

如果說一日行走距離 $m$ 可以在 $k+1$ 天走完,那麼距離 $m+1$ 也一定可以
所以觀察到行走距離具有單調性
枚舉一天行走的距離,如果所需的時間超過 $k$ ,就將枚舉的上界調整,否則調整下界

Code

閱讀全文 »

題敘

https://toj.tfcis.org/oj/pro/274/
定義單錯誤迴文為一個字串中只除去一個字元後,剩下的字串為迴文
給一個字串,求該字串是否為單錯誤迴文

想法

對於一個字串 $s$ ,檢查其左右兩端 $L$ $R$
如果 $s[L] == s[R]$ 那麼就繼續檢查 $L+1$ 到 $R-1$
否則判斷 $L+1$ 到 $R$ 這個字串以及 $L$ 到 $R-1$ 這個字串誰是迴文
如果在這其中錯誤超過 $1$ 次,那就表示這不是單錯誤迴文

Code

閱讀全文 »

題敘

http://domen111.github.io/UVa-Easy-Viewer/?374
給定三個整數 $B$ $P$ $M$ ,求 $B^P mod M$

想法1 - 暴力解

從 $1$ 開始到 $P$ ,每次乘上 $B$ 再模 $M$ ,複雜度 $O(P)$
但是複雜度過高,會TLE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//By Koios1143
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;
ll b,p,m;

int main(){
while(cin>>b>>p>>m){
ll ans=1;
for(int i=1 ; i<=p ; i++){
ans = ans*b % m;
}
cout<<ans<<"\n";
}

return 0;
}
閱讀全文 »

TOJ 565

題敘

https://toj.tfcis.org/oj/pro/565/
給一張捷運的路線圖以及兩個整數 $A$ $B$ 和起點 $S$,從 $i$ 站到 $j$ 站所需要的花費為
$A經過路線數 + B經過路線權重總和$
求 $S$ 到各點所需的最小花費

想法

Dijkstra 模板題
如果點 $i$ 到點 $j$ 最短路徑為 $A$
則點 $i$ 到 $A$ 上的任一點的路徑也必定為最短路徑 (前提是邊權都是正的)
所以,我們可以每次都走距離最短的路,不斷更新起點到終點的距離,最終更新完必定會是最短距離

閱讀全文 »

TOJ 564

題敘

https://toj.tfcis.org/oj/pro/564/
給一個序列,如果求該敘列有多少種回文排列方式

想法

如果說序列中相同元素各數有一種以上是奇數,可以保證一定無解
因為要排成回文,我們可以只看一半,而另一半的答案會隨之確定
其他情況下,將所有相同數字的元素數量切半來看,排列好
最後將不同數字排列,就可以獲得答案

閱讀全文 »

codeforces 543A

題敘

今天有 $n$ 個程式設計師,要寫 $m$ 行程式碼
第 $i$ 個程式設計師每寫1行分別會有 $bug[i]$ 個bug
給定 $n$ $m$ $b$ $p$ $bug[]$
要求在總共不超過 $b$ 個bug的情況下, $n$ 個程式設計師完成 $m$ 行程式碼的方法數有多少種
由於結果可能很大,求總和模 $p$ 的值

想法

觀察題目後,可以發現到會影響到bug總數的會是 哪個程式設計師 以及 寫了幾行

閱讀全文 »

TOJ 169

題敘

https://toj.tfcis.org/oj/pro/169/
可見杆問題
給一群杆子的高度,求在每根杆子上向左看能看到的杆子數量總和
定義能看到是你所在的桿杆和該桿杆之間的所有桿杆高度都小於你所在的桿杆的高度

想法

觀察能被其他杆子看到的集合所形成的序列可以發現是呈現 遞增 的狀態
因此我們只要能維護一個嚴格遞增的序列,剩下的就必定會是能被看到的杆子
因為這裡的狀態是先進後出,跟stack一樣,所以選擇stack
stack的頂與當前元素之間的元素數量即為當前杆子能看到的數量

閱讀全文 »