#30689: 關於第三行的敘述


810339@fhsh.khc.edu.tw (冠傑(真 •鳳薪水題王))

學校 : 國立鳳新高級中學
編號 : 118861
來源 : [49.159.209.50]
最後登入時間 :
2022-10-17 18:57:11
h082. 2. 贏家預測 -- 2022年1月APCS | From: [220.157.123.53] | 發表日期 : 2022-06-06 18:06

以下列為例

4 5
4 1 5 3
6 5 1 6
4 1 3 2
第三行的順序是說排序第4個與第1個先比。
也就是說戰力3的人先跟戰力4的人比。
烙單的會排在所有贏的人的後面(成功組與失敗組中間)
還要注意測資會超過int範圍(題目有講)
main() {
  int n,m,k;
  while(cin>>n>>m &&n &&m){
    int s[1005],t[100000];
    int lose[1005] = {0};
    vector<int> v,v1,v2;
    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;
      v.push_back(k);
  }//輸入測資
    while(v.size()>1){
      for(int i=0;i<v.size()-1;i+=2){
        int fi=v[i],se = v[i+1];
        int a=s[fi],b=t[fi];
        int c=s[se],d=t[se];
        if(a*b>=c*d){
        戰力計算
          lose[se]++;
          if(lose[se]<m)v2.push_back(se);
          v1.push_back(fi);
        }else if(a*b<c*d){
        戰力計算
          lose[fi]++;
          if(lose[fi]<m)v2.push_back(fi);
          v1.push_back(se);
        }
      }
      if((int)v.size()%2 == 1)v1.push_back(v.back());
      v=v1;
      v.insert(v.end(),v2.begin(),v2.end());
      v1.clear();
      v2.clear();
    }
    cout<<v[0]<<endl;
  }
}
 
ZeroJudge Forum