###### tags: `APCS` `c++` `vector` # 題解 zerojudge h082: 2. 贏家預測 APCS ## vector ```cpp= #include<bits/stdc++.h> using namespace std; int S[1005],T[1005],l[1005]={0}; vector<int>r,win,lose; int main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n,m,k; cin>>n>>m; for(int i=1;i<=n;i++) cin>>S[i]; for(int i=1;i<=n;i++) cin>>T[i]; for(int i=0;i<n;i++){cin>>k;r.push_back(k);} long long a,b,c,d; while(r.size()>1){ win.clear();lose.clear(); for(int i=0;i<r.size()-1;i+=2){ a=S[r[i]];b=T[r[i]]; c=S[r[i+1]];d=T[r[i+1]]; if(a*b>=c*d){ S[r[i]]=a+(c*d)/(2*b);T[r[i]]=b+(c*d)/(2*a); S[r[i+1]]=c+c/2;T[r[i+1]]=d+d/2; win.push_back(r[i]); l[r[i+1]]++; if(l[r[i+1]]<m) lose.push_back(r[i+1]); } else{ S[r[i]]=a+a/2;T[r[i]]=b+b/2; S[r[i+1]]=c+(a*b)/(2*d);T[r[i+1]]=d+(a*b)/(2*c); win.push_back(r[i+1]); l[r[i]]++; if(l[r[i]]<m) lose.push_back(r[i]); } } if(r.size()&1)//有奇數個,有人烙單 win.push_back(r[r.size()-1]); r.clear(); r.insert(r.end(),win.begin(),win.end()); r.insert(r.end(),lose.begin(),lose.end()); } cout<<*r.begin(); } ```