k628 - Centauri Prime
題目描述
題目要求判斷一個王國的名字以哪個字母結尾,並根據結尾字母決定由 Alice、Bob 或 nobody 統治。如果王國名字以 'y' 或 'Y' 結尾,則沒有統治者。如果以元音字母結尾,則由 Alice 統治。否則,由 Bob 統治。
解題思路
程式碼首先讀取測試案例的數量 n。然後,對於每個測試案例,讀取王國的名字 s。程式碼檢查王國名字的最後一個字母是否為 'y' 或 'Y'。如果是,則輸出 "nobody"。否則,程式碼檢查最後一個字母是否為元音字母('A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u')。如果是,則輸出 "Alice"。否則,輸出 "Bob"。
複雜度分析
- 時間複雜度: O(n*m),其中 n 是測試案例的數量,m 是王國名字的平均長度。因為對於每個測試案例,需要檢查王國名字的最後一個字母,以及是否為元音字母,這需要遍歷元音字母的集合。
- 空間複雜度: O(1),因為程式碼使用的額外空間是固定的,不隨輸入大小而變化。
程式碼
#include <bits/stdc++.h>
using namespace std;
int n;
string s,a={'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'};
int main(){
cin.tie(0); ios::sync_with_stdio(0);
cin >> n;
getline(cin,s);
for(int ca=1;ca<=n;++ca){
getline(cin,s);
cout << "Case #" << ca << ": " << s << " is ruled by ";
bool ia=0;
if(s[s.size()-1]=='y'||s[s.size()-1]=='Y'){
cout << "nobody.\n";
continue;
}
for(int i=0;i<a.size();++i){
if(s[s.size()-1]==a[i]){
ia=1;
}
}
if(ia){
cout << "Alice.\n";
}
else{
cout << "Bob.\n";
}
}
}