CF205A Little Elephant and Rozdil 題解
阿新 • • 發佈:2021-12-21
CF205A Little Elephant and Rozdil 題解
個數 \(a_1,a_2,...,a_n\),請找到最小的數的編號,如果最小數有多個,輸出 \(\texttt{Still Rozdil}\)。
Content
有一頭小象住在 \(\texttt{Rozdil}\) 小鎮裡,它想去其他的小鎮旅行。
這個國家一共有 \(n\) 個小鎮,第 \(i\) 個小鎮距離 \(\texttt{Rozdil}\) 小鎮的距離為 \(a_i\)。小象想去往離 \(\texttt{Rozdil}\) 最近的小鎮,但是,如果這樣的小鎮不止一個的話,那麼小象就會繼續待在 \(\texttt{Rozdil}\)。
現在,它想問你這個距離 \(\texttt{Rozdil}\) 最近的小鎮的編號,或者,如果這樣的小鎮不止一個的話,請輸出 \(\texttt{Still Rozdil}\)。
一句話題意:給出 \(n\)
資料範圍:\(1\leqslant n\leqslant 10^5,1\leqslant a_i\leqslant 10^9\)。
Solution
這道題目看上去比較麻煩,實則非常簡單,就是讓我們找到最小數的編號罷了。
介於 \(n\leqslant 10^5\),我想到了一個很容易實現的演算法:先求出這個最小數,然後再在數列中掃一遍,掃出這個最小數出現的次數並標記它的位置,最後判斷並輸出。複雜度 \(\mathcal{O}(n)\),足以通過本題。
Code
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; int n, a[100007], minx = 0x3f3f3f3f, minans, cnt; int main() { scanf("%d", &n); for(int i = 1; i <= n; ++i) { scanf("%d", &a[i]); minx = min(minx, a[i]); } for(int i = 1; i <= n; ++i) if(a[i] == minx) minans = i, cnt++; if(cnt > 1) printf("Still Rozdil"); else printf("%d", minans); }