d984 - 棄保效應
題目描述
題目描述了在選舉中,選民會根據候選人當選的機率進行策略性投票,即「棄保效應」。給定三位候選人 A、B、C 的初始支持者人數,模擬棄保效應,判斷最終哪位候選人會當選。
解題思路
解題思路是模擬棄保效應的過程。首先,找出支持者人數最少的候選人。然後,將該候選人的所有支持者轉移到支持者人數第二多的候選人。重複此過程,直到沒有候選人可以棄保。最後,比較三位候選人的支持者人數,支持者人數最多的候選人即為最終的贏家。程式碼直接模擬了所有可能的情況,判斷誰會當選。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
#include <iostream>
using namespace std;
int main()
{
long long int a,b,c;
while(cin>>a>>b>>c){
if(a>=b&&b>=c||b>=a&&a>=c){
if(a>b){
b+=c;
if(a>b)
cout<<"A"<<endl;
else
cout<<"B"<<endl;
}else{
a+=c;
if(b>a)
cout<<"B"<<endl;
else
cout<<"A"<<endl;
}
}else if(b>=c&&c>=a||c>=b&&b>=a){
if(b>c){
c+=a;
if(b>c)
cout<<"B"<<endl;
else
cout<<"C"<<endl;
}else{
b+=a;
if(c>b)
cout<<"C"<<endl;
else
cout<<"B"<<endl;
}
}else if(c>=a&&a>=b||a>=c&&c>=b){
if(c>a){
a+=b;
if(c>a)
cout<<"C"<<endl;
else
cout<<"A"<<endl;
}else{
c+=b;
if(a>c)
cout<<"A"<<endl;
else
cout<<"C"<<endl;
}
}
}
return 0;
}