1. 程式人生 > 其它 >CF205A Little Elephant and Rozdil 題解

CF205A Little Elephant and Rozdil 題解

CF205A Little Elephant and Rozdil 題解

Content

有一頭小象住在 \(\texttt{Rozdil}\) 小鎮裡,它想去其他的小鎮旅行。

這個國家一共有 \(n\) 個小鎮,第 \(i\) 個小鎮距離 \(\texttt{Rozdil}\) 小鎮的距離為 \(a_i\)。小象想去往離 \(\texttt{Rozdil}\) 最近的小鎮,但是,如果這樣的小鎮不止一個的話,那麼小象就會繼續待在 \(\texttt{Rozdil}\)

現在,它想問你這個距離 \(\texttt{Rozdil}\) 最近的小鎮的編號,或者,如果這樣的小鎮不止一個的話,請輸出 \(\texttt{Still Rozdil}\)


一句話題意:給出 \(n\)

個數 \(a_1,a_2,...,a_n\),請找到最小的數的編號,如果最小數有多個,輸出 \(\texttt{Still Rozdil}\)

資料範圍:\(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);
}