d258 - 11313 - Gourmet Games
題目描述
題目描述了一個烹飪比賽,有 n 位廚師,每集比賽選出 m 位廚師,直到剩下 1 位優勝者。題目要求判斷在給定的 n 和 m 下,是否能通過這種方式選出優勝者,如果可以,則計算所需的比賽集數。如果無法選出優勝者,則輸出 "cannot do this"。
解題思路
這個問題可以通過模擬比賽過程來解決。每次比賽,如果廚師人數能被 m 整除,則直接除以 m,得到下一輪的廚師人數。如果不能整除,則計算商和餘數,商表示下一輪的廚師人數,餘數表示直接晉級的種子廚師人數。然後將商和餘數加起來,作為下一輪的廚師人數。重複這個過程,直到廚師人數為 1。如果最終廚師人數為 1,則輸出比賽集數;否則,輸出 "cannot do this"。
複雜度分析
- 時間複雜度: O(n)
- 空間複雜度: O(1)
程式碼
#include <iostream>
using namespace std;
int m,n,t;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
cin >> t;
while(t--){
cin >> n >> m;
int ans=0;
while(n>=m){
if(n%m==0){
ans+=n/m;
n=n/m;
}
else{
ans+=n/m;
n=n/m+n%m;
}
}
if(n==1)
cout << ans << "\n";
else
cout << "cannot do this\n";
}
}