zoukankan      html  css  js  c++  java
  • P4715 【深基16.例1】淘汰赛

    P4715 【深基16.例1】淘汰赛

    简介

    一道简单的二叉树题

    题目

    有 2的n次方 (n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节。我经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?

    思路

    我和一个憨憨一样按照题目意思模拟了一遍

    f[j][i]:第i层,第j个数字,目前组中的最大
    

    于是,按照题目的测试数据:
    3
    4 2 3 1 10 5 9 7
    我们的 f 数组中即为:
    4 2 3 1 10 5 9 7
    4 3 10 9
    4 10
    10

    代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    struct con{
    	ll num,sco;
    };
    con f[1000][8];
    ll n,n1;
    ll cf(ll x){
    	ll ans=1;
    	for(int i=1;i<=x;i++) ans*=2;
    	return ans;
    }
    int main(){
    	cin>>n; n1=cf(n);
    	for(int i=1;i<=n1;i++) {
    		cin>>f[i][1].sco;
    		f[i][1].num=i;
    	}
    	if(n==1) {
    		if(f[1][1].sco>f[2][1].sco) cout<<f[2][1].num;
    		else cout<<f[1][1].num;
    		return 0;
    	}
    	for(int i=2;i<=n+1;i++){
    		ll n2=cf(n-i+1);
    		for(int j=1;j<=n2;j++) {
    			if(f[j*2-1][i-1].sco>f[j*2][i-1].sco){
    				f[j][i].num=f[j*2-1][i-1].num;
    				f[j][i].sco=f[j*2-1][i-1].sco;
    			}
    			else {
    				f[j][i].num=f[j*2][i-1].num;
    				f[j][i].sco=f[j*2][i-1].sco;
    			}
    		}
    	}
    	/*for(int i=1;i<=n+1;i++){
    		ll n2=cf(n-i+1);
    		for(int j=1;j<=n2;j++) cout<<f[j][i].sco<<" ";
    		cout<<endl;
    	}*/
    	if(f[1][n].sco>f[2][n].sco) cout<<f[2][n].num;
    	else cout<<f[1][n].num;
    	//cout<<f[1][n-1]<<endl;
    	return 0;
    }
    
  • 相关阅读:
    最热CPLDFPGA论坛
    DSP Builder开发环境安装
    math.h数学函数库
    (转)Fast Input/Output Registers约束
    用EXCEL去掉最高最低数,网上看到,觉得不错
    GMS6.5.3有0DAY的下载了
    [转]为ArcGIS制作符号
    Total Commander 7.5Beta1的便携版
    关于CAD的一个小发现
    可恶的AP PDF password recovery
  • 原文地址:https://www.cnblogs.com/tushukai/p/14027720.html
Copyright © 2011-2022 走看看