# Greedy# Conditional Logic# Simulation

d984 - 棄保效應

🔗 前往 ZeroJudge 原題

題目描述

題目描述了在選舉中,選民會根據候選人當選的機率進行策略性投票,即「棄保效應」。給定三位候選人 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;
}

Discussion