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;
    }
    
  • 相关阅读:
    【20111012】数据库因机器名被修改无法成功发布问题
    SQL Server 2008 r2 bpa 安装
    A faster DBCC CHECKDB? By Ian Stirk, 2011/08/23
    SQL Server 2005 性能故障白皮书
    Best Practices Analyzer Tool for Microsoft SQL Server 2000
    top详细使用说明
    SQLIO测试 SAN
    数据库事务发布性能调整
    查询优化建议
    证书配置数据库镜像 demo from msdn
  • 原文地址:https://www.cnblogs.com/tushukai/p/14027720.html
Copyright © 2011-2022 走看看