链接:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4484

题意:

n支队伍(2≤n≤1024,且n是2的整数幂)打淘汰赛,每轮都是两两配对,胜者进入下一轮。
每支队伍的实力固定,并且已知每两支队伍之间的一场比赛结果(“实力固定”是指,例如,
队伍1曾经胜过队伍2,则二者在今后的交锋中队伍1总会获胜)。你喜欢1号队。虽然
它不一定是最强的,但是它可以直接打败其他队伍中的至少一半,并且对于每支1号队不能
直接打败的队伍t,总是存在一支1号队能直接打败的队伍t'使得t'能直接打败t。
问:如何安排比赛,使得1号队夺冠?

分析:

构造法。
用黑色代表强队(即1号队不能直接打败的队伍),再用灰色代表“有用的队”,
即能打败某个黑色队但不能打败1号队的队伍(说它们有用是因为可以间接打败黑色队)。
将每一轮比赛分为四个阶段,直到第logn轮:
阶段1:尽量“消灭”黑色队,即依次考虑每一个黑色队,选一个能打败且还没安排对手的灰色队。
阶段2:给1号队任选一个能打败的。这个选择一定可以成功,因为1号队能打败的队伍至少一半(题设)。
阶段3:把剩下的黑色队伍任意配对,任它们“自相残杀”,不管谁赢都无所谓。
阶段4:剩下的队伍任意配对。

代码:

 #include <cstdio>
#include <vector>
using namespace std; const int UP = + ;
char res[UP][UP]; int main(){
int n;
while(~scanf("%d", &n)){
for(int i = ; i <= n; i++) scanf("%s", res[i] + ); vector<int> win, lose;
for(int i = ; i <= n; i++){
if(res[][i] == '') win.push_back(i);
else lose.push_back(i);
} while(n > ){
vector<int> win2, lose2, last; for(int i = ; i < lose.size(); i++){
int lid = lose[i];
bool found = false;
for(int t = ; t < win.size(); t++){
int& wid = win[t];
if(wid && res[wid][lid] == ''){
printf("%d %d\n", wid, lid);
win2.push_back(wid);
wid = ;
found = true;
break;
}
}
if(!found) last.push_back(lid);
} bool first = true;
for(int i = ; i < win.size(); i++){
int wid = win[i];
if(wid){
if(first) printf("1 %d\n", wid), first = false;
else last.push_back(wid);
}
} for(int i = ; i < last.size(); i += ){
printf("%d %d\n", last[i], last[i+]);
int wid = last[i+];
if(res[last[i]][wid] == '') wid = last[i];
if(res[][wid] == '') win2.push_back(wid);
else lose2.push_back(wid);
} win = win2;
lose = lose2;
n >>= ;
}
}
return ;
}

UVa 1609 - Foul Play的更多相关文章

  1. UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)

    题意:有n支队伍(n是2的整数幂,2<=n<=4),打淘汰赛,胜者进入下一轮,其中1号队伍能打败至少一半的队伍,对于它不能打败的队伍l,一定存在一支它能够打败的队伍w,使得w能直接打败l, ...

  2. UVa 1609 (博弈) Foul Play

    姑且把它归类为一道博弈吧,毕竟这也是在找必胜方案. 十分有意思的一道题目,设计一种方案让你支持的1队获胜. 题目给出了两个很重要的条件: 1队能打败至少一半的队伍 对于1队不能打败的黑队,一定存在一个 ...

  3. 紫书 例题8-17 UVa 1609 (构造法)(详细注释)

    这道题用构造法, 就是自己依据题目想出一种可以得到解的方法, 没有什么规律可言, 只能根据题目本身来思考. 这道题的构造法比较复杂, 不知道刘汝佳是怎么想出来的, 我想的话肯定想不到. 具体思路紫书上 ...

  4. Uva 1609 Feel Good

    题面:给出长度为n的数列,然后算出其区间和乘区间最小数所能得到的最大值,并且输出区间 样例输入: 6 3 1 6 4 5 2 样例输出: 60 3 5 原题链接:https://vjudge.net/ ...

  5. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  6. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  7. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  8. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  9. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

随机推荐

  1. 深入理解JavaScript系列(39):设计模式之适配器模式

    介绍 适配器模式(Adapter)是将一个类(对象)的接口(方法或属性)转化成客户希望的另外一个接口(方法或属性),适配器模式使得原本由于接口不兼容而不能一起工作的那些类(对象)可以一些工作.速成包装 ...

  2. Telerik 控件本地化

    一共四种方式: Localization using built-in resources Resource keys Localization using ResourceManager Local ...

  3. JavaScript中 运算符

    运算符对一个或多个变量或值(操作数)进行运算,并返回一个新值 根据所执行的运算,运算符可分为以下类别: (1) 算术运算符 (2) 比较运算符 运算符 说 明 示 例 ==  等于. 如果两个操作数相 ...

  4. C#语言-08.序列化与反序列化

    a. 序列化:是将对象的状态存储到特定存储介质中的过程 i. 语法:public void Serialize(序列化过程的文件流,保存的对象) b. 返序列化:是从特定存储介质中将数据重新构建对象的 ...

  5. Sequence contains no elements : LINQ error

    1.错误意思: 出现错误的原因是:你要从一个null中取的数据. 2.错误的处理 1,使用FirstOrDefault() 来代替 First() 2.使用SingleOrDefault 来代替 Si ...

  6. Windows下RSA密钥生成工具openssl

    下载openssl.zip 1. 生成原始 RSA私钥文件 private_key.pem openssl genrsa -out private_key.pem 1024 2. 将原始 RSA私钥转 ...

  7. 单例模式的c++实现

    #pragma once #include <iostream> #include <memory> #include <Windows.h> using name ...

  8. shell脚本报错 value too great for base

    此错误是shell脚本在计算以0开头的数字时,默认以8进制进行计算,导致在计算08时超过了8进制的范围,报此错误. shell脚本代码如下: #!/bin/bash a= ..} do a=$[$a+ ...

  9. Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources failed: Unable to load the mojo 'resources' (or one of its required components)

    1.异常提示: Description Resource Path Location Type Execution default-resources of goal org.apache.maven ...

  10. Linux基础之-利用shell脚本实现自动监控系统服务

    目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户 条件: 1. 主机及子机IP地址,hostname已确定: 2. 主机与子机能够免密通讯,即基于密匙通讯(相关命 ...