UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
题意:有n支队伍(n是2的整数幂,2<=n<=4),打淘汰赛,胜者进入下一轮,其中1号队伍能打败至少一半的队伍,对于它不能打败的队伍l,一定存在一支它能够打败的队伍w,使得w能直接打败l,求一种方案保证1号队伍必胜。
队伍分类:不能直接打败的队伍是黑色队伍,能直接打败且能打败黑色队伍的是灰色队伍。
这里直接给出算法描述了:
阶段1:贪心,每个不能直接打败的队伍,选一个没有匹配的能打败它的灰色队伍。
阶段2:对于剩下的黑色队伍,任意匹配,可能会剩下一个。
阶段3:找一个能直接打败的队伍和1号匹配
阶段4:剩下的其他队伍任意匹配。
对于进阶的队伍,仍然会满足之前的条件。直到1号队伍胜利为止。
正确性请参考紫书。手写了个vec,感觉效率不比stl快多少,可能数据比较少吧。。。下标还写错了一发,尴尬。
#include<bits/stdc++.h>
using namespace std;
const int maxn = ; char G[maxn][maxn];
int vec[][maxn]; int main()
{
// freopen("in.txt","r",stdin);
int n, *phase = vec[];
while(~scanf("%d",&n)){
for(int i = ; i < n; i++) scanf("%s",G[i]); int *win = vec[],*lose = vec[],sz1= ,sz2 = ;
for(int i = ; i < n; i++){
if(G[][i] == '') win[sz1++] = i;
else lose[sz2++] = i;
}
int N = n, s = ;
while(N > ){
s ^= ;
int *win2 = vec[s+], *lose2 = vec[s+], sz3 = ,sz4 = ;
int sz5 = ;
for(int i = ; i < sz2; i++){
int tlose = lose[i];
int j = ;
for(; j < sz1; j++){
int &twin = win[j];
if(twin > && G[twin][tlose] == '') {
printf("%d %d\n",twin+,tlose+);
win2[sz3++] = twin;
twin = ;
break;
}
}
if(j == sz1) phase[sz5++] = tlose;
} while(sz5>){
int &a = phase[sz5-], &b = phase[sz5-];
printf("%d %d\n",a+,b+);
if(G[a][b] == '') lose2[sz4++] = a;
else lose2[sz4++] = b;
sz5 -= ;
}
bool flag = sz5 == ;
int i = ;
for(; i < sz1; i++) if(win[i]>) { printf("1 %d\n",win[i++]+); break; }
for(; i < sz1; i++) if(win[i]>) { phase[sz5++] = win[i]; } i = ;
if(flag) {
int &a = phase[i], &b = phase[i+];
if(G[a][b] == '') {
lose2[sz4++] = a;
}else {
win2[sz3++] = b;
}
printf("%d %d\n",a+,b+);
i += ;
} for(; i < sz5; i += ){
int &a = phase[i], &b = phase[i+];
if(G[a][b] == '') {
win2[sz3++] = a;
}else {
win2[sz3++] = b;
}
printf("%d %d\n",a+,b+);
}
sz1 = sz3; sz2 = sz4;
win = win2; lose = lose2;
N >>= ;
}
}
return ;
}
UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)的更多相关文章
- UVa 1609 - Foul Play
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- java面试-公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解
一.公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解 公平锁:多个线程按照申请的顺序来获取锁. 非公平锁:多个线程获取锁的先后顺序与申请锁的顺序无关.[ReentrantLock 默认非公平.s ...
- UVa 1609 (博弈) Foul Play
姑且把它归类为一道博弈吧,毕竟这也是在找必胜方案. 十分有意思的一道题目,设计一种方案让你支持的1队获胜. 题目给出了两个很重要的条件: 1队能打败至少一半的队伍 对于1队不能打败的黑队,一定存在一个 ...
- 紫书 例题8-17 UVa 1609 (构造法)(详细注释)
这道题用构造法, 就是自己依据题目想出一种可以得到解的方法, 没有什么规律可言, 只能根据题目本身来思考. 这道题的构造法比较复杂, 不知道刘汝佳是怎么想出来的, 我想的话肯定想不到. 具体思路紫书上 ...
- Uva 1609 Feel Good
题面:给出长度为n的数列,然后算出其区间和乘区间最小数所能得到的最大值,并且输出区间 样例输入: 6 3 1 6 4 5 2 样例输出: 60 3 5 原题链接:https://vjudge.net/ ...
- UVA - 12627 Erratic Expansion(奇怪的气球膨胀)(递归)
题意:问k小时后,第A~B行一共有多少个红气球. 分析:观察图可发现,k小时后,图中最下面cur行的红气球个数满足下式: (1)当cur <= POW[k - 1]时, dfs(k, cur) ...
- 【C/C++】例题 4-2 刽子手游戏/算法竞赛入门经典/函数和递归
[题目] 猜单词游戏. 计算机想一个单词让你猜,你每次猜一个字母. 如果单词里有那个[字母],[所有该字母会显示出来]. 如果没有那个字母,算猜错一次.[最多只能猜错六次] 猜一个已经猜过的字母也算错 ...
- 中式台球 规则 ( ChinaBilliards )
中式台球比赛规则 中式台球兴起于上世纪八十年代末,之前叫法有“中式8球”.“中式9球”.“十六彩”.“美式落袋”.“普尔“.”八球””等等.中国台球协会于2012年宣布统一该项运动称呼,定名为“中式台 ...
- TCG卡牌游戏研究:《炉石战记:魔兽英雄传》所做的改变
转自:http://www.gameres.com/665306.html TCG演进史 说到卡牌游戏,大家会联想到什么呢? 是历史悠久的扑克牌.风靡全球的<MTG 魔法风云会>与< ...
随机推荐
- 反射学习:(System.Reflection)
反射为了动态(运行时动态) 原理:读取metadata(?) Assembly assembly = Assembly.Load("TestReflections");//反射 ...
- 由一次动态改变font-size的大小引申的一系列困惑补录
以下结论如有错误,欢迎指正 在切入正题之前,先了解下window 和document这两个大对象 我们熟知 JavaScript的组成如下图所示: window对象和document对象分别属于哪个分 ...
- 深入剖析ASP.NET Core2.1部署模型,你会大吃一惊
---------------------------- 以下内容针对 ASP.NET Core2.1版本,2.2推出windows IIS进程内寄宿 暂不展开讨论---------------- ...
- bzoj 2632: [neerc2011]Gcd guessing game【贪心】
这个告诉gcd的操作实际上就是告诉一个因数是否选,最坏情况是1,判断掉所有因数才能选 然后肯定是用猜不重复质数积比较划算,问题就变成若干个质数,分成数量尽量小每组乘积<=n的若干组 从大质数开始 ...
- JVM虚拟机的大概了解(新人面试必看!)
一. 引言,环境安装测试中的代码解析 1. HotSpot(TM) 64-bit Server VM(build 25.181-b13,mixed mode),这是多种 HotSo ...
- 洛谷P1002 过河卒
关于蒟蒻的我,刚刚接触DP.... 那么就来做一道简单DP吧.... 首先先看题: 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一 ...
- PAT甲级——1111 Online Map (单源最短路经的Dijkstra算法、priority_queue的使用)
本文章同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90041078 1111 Online Map (30 分) ...
- springmvc配置的国际化资源文件显示为???key???的错误原因
问题概述: 在spring mvc 的jstl view 视图解析器中 使用jstl <fmt:message key=”“”></fmt> 不不要绑定也可以正常显示,这里却显 ...
- Js 数组对象排序
1.定义函数 /** * 数组对象排序函数 * @param {any} name 排序字段 * @param {any} order 升.降(这里事true.false记得处理下) */ var b ...
- CSS样式之操作属性二
********css样式之属性操作******** 一.文本属性 1.text-align:cnter 文本居中 2.line heigth 垂直居中 :行高,和高度对应 3.vertical-al ...