Foul Play UVA
来源:互联网 发布:淘宝联盟qq群推广步揍 编辑:程序博客网 时间:2024/05/21 04:40
题目传送门
题意:有n只队伍(n是2的整数幂)打淘汰赛,每一轮都是两两配对,胜利者进入下一轮。每一只队伍的实力都是确定的,你最喜欢编号为一的队伍,设计一个方案让队伍一一定胜利。
思路:这个题目有两个关键性的条件
条件1:1号队伍至少能打败一半的队伍。
条件2:对于不能直接打败的队伍t,存在能够打败的队伍t1,t1能够打败t。
这两个条件是至关重要的,设计三个阶段
阶段1:尽可能的消灭队伍1无法打败的队伍
阶段2:在还没匹配的队伍中找到一个1号队伍能够打败的
阶段3:将剩余的队伍进行匹配
#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <fstream>#include <iostream>#include <list>#include <map>#include <queue>#include <set>#include <sstream>#include <stack>#include <string>#include <vector>#define MAXN 1100#define MAXE 210#define INF 10000000#define MOD 1000000007#define LL long long#define pi acos(-1.0)using namespace std;char str[MAXN][MAXN];vector<int> win;vector<int> lose;int main() { std::ios::sync_with_stdio(false); int n; while (~scanf("%d", &n)) { for (int i = 1; i <= n; ++i) { scanf("%s", str[i] + 1); } win.clear(); lose.clear(); for (int i = 2; i <= n; ++i) { if (str[1][i] == '1') { win.push_back(i); } else { lose.push_back(i); } } int m = n; while (m >>= 1) { vector<int> win2, lose2, final2; for (int i = 0; i < lose.size(); ++i) { bool flag = false; for (int j = 0; j < win.size(); ++j) { if (win[j] != -1 && str[win[j]][lose[i]] == '1') { printf("%d %d\n", win[j], lose[i]); win2.push_back(win[j]); win[j] = -1; flag = true; break; } } if (!flag) { final2.push_back(lose[i]); } } bool flag = false; for (int i = 0; i < win.size(); ++i) { if (win[i] != -1 && !flag) { flag = true; printf("1 %d\n", win[i]); win[i] = -1; } else if (win[i] != -1 && flag) { final2.push_back(win[i]); } } for (int i = 0; i < final2.size(); i += 2) { printf("%d %d\n", final2[i], final2[i + 1]); if (str[final2[i]][final2[i + 1]] == '1') { if (str[1][final2[i]] == '1') { win2.push_back(final2[i]); } else { lose2.push_back(final2[i]); } } else { if (str[1][final2[i + 1]] == '1') { win2.push_back(final2[i + 1]); } else { lose2.push_back(final2[i + 1]); } } } win = win2; lose = lose2; } } return 0;}/*4011000110000101080011101010101111000100100100010100110010101010110001000010101010*/
阅读全文
1 0
- Foul Play UVA
- UVA 1609 Foul Play
- UVA-1609 Foul Play
- Foul Play UVA
- UVa OJ 1609 - Foul Play
- UVa 1609:Foul Play(递归+构造)
- 1609 Foul Play
- uva1609 foul play
- Foul Play(决策+递归)
- NWERC 2012 Foul Play 构造 (uvaLive 6271 )
- 例题8-17 不公平竞赛(Foul Play, ACM/ICPC NWERC 2012, UVa1609)
- UVA Play on Words
- cried foul
- uva 10129 - Play on Words
- uva 10129 - Play on Words
- uva 10129 - Play on Words
- UVa 10129 - Play on Words
- UVa 10129 - Play on Words
- 在v8系统上显示数据库的数据
- ASR---自动语音识别 概述
- Linux firewalld
- JavaScript-给字符串加千分符
- 并查集
- Foul Play UVA
- POJ 2996 Help Me with the Game(模拟)
- Linux下nodejs(一):UEditor 使用
- CSS中清除浮动的方式探究
- SLF4J: Class path contains multiple SLF4J bindings.
- Codeforces
- HTTP协议—— 简单认识TCP/IP协议
- Android将Excel表格解析成json文件
- POJ 2993 Emag eht htiw Em Pleh(模拟)