清华集训2014 day2 task3 矩阵变换
题目
算法 稳定婚姻系统(其实就是贪心)
一个方案不合法,当且仅当下面这种情况:
设第\(i\)行选了数字\(x\),如果第\(j\)行有一个\(x\)在第\(i\)行的\(x\)后面,并且第\(j\)行所选的数字在第\(j\)行的\(x\)后面。
分析到这里就是典型的稳定婚姻系统了。
代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <assert.h>
using namespace std;
#ifdef debug
#define ep(...) fprintf(stderr, __VA_ARGS__)
#else
#define ep(...) assert(true)
#endif
template <class T>
void relax(T &a, const T &b)
{
if (b > a) a = b;
}
template <class T>
void tension(T &a, const T &b)
{
if (b < a) a = b;
}
int geti()
{
int ret = 0;
char ch = getchar();
while (ch < '0' || ch > '9') ch = getchar();
do
{
ret = ret * 10 + (int) ch - 48;
ch = getchar();
}while (ch >= '0' && ch <= '9');
return ret;
}
const int MaxN = 203;
const int MaxM = 403;
int n, m;
int A[MaxN][MaxM];
void output(const int *x)
{
ep("answer ");
for (int i = 0; i < n; i ++)
{
printf("%d ", x[i]);
ep("%d ", x[i]);
}
printf("\n");
ep("\n");
}
void output_nosolution()
{
ep("no solution\n");
printf("\\\n");
}
int posi[MaxN][MaxN];
int choice[MaxN];
void next_choice(const int &i)
{
int &tmp = choice[i];
tmp ++;
while (tmp < m && A[i][tmp] == 0)
tmp ++;
if (tmp >= m) tmp = -1;
}
void Main()
{
n = geti();
m = geti();
for (int i = 0; i < n; i ++)
for (int j = 0; j < m; j ++)
{
A[i][j] = geti();
if (A[i][j])
posi[i][ A[i][j] ] = j;
}
{
for (int i = 0; i < n; i ++)
{
choice[i] = -1;
next_choice(i);
}
static int row_love[MaxN], num_love[MaxN];
for (int i = 0; i < n; i ++)
row_love[i] = num_love[i + 1] = -1;
int cnt = 0;
while (cnt < n)
{
for (int i = 0; i < n; i ++)
{
if (row_love[i] == -1)
{
int num = A[i][choice[i]];
assert(num != -1);
next_choice(i);
if (num_love[num] == -1)
{
cnt ++;
row_love[i] = num;
num_love[num] = i;
}
else if (posi[i][num] > posi[ num_love[num] ][num])
{
row_love[num_love[num]] = -1;
row_love[i] = num;
num_love[num] = i;
}
}
}
}
output(row_love);
}
}
int main()
{
#if defined(debug) || defined(local)
freopen("c.in", "r", stdin);
freopen("c.out", "w", stdout);
#endif
int cases = geti();
for (int i = 0; i < cases; i ++)
Main();
return 0;
}
清华集训2014 day2 task3 矩阵变换的更多相关文章
- 清华集训2014 day2 task1 简单回路
题目 如题. 算法 就是刚学习的插头DP. 从前往后和从后往前分别进行一次DP. 要点 合法的括号序列只有103个 如何合并两次dp的信息 一开始犯傻了,以为当且仅当两个轮廓线的状态相同才是合法的方案 ...
- 清华集训2014 day1 task3 奇数国
题目 题目看起来好像很难的样子!其实不然,这是最简单的一道题. 算法 首先要注意的是: \(number \cdot x + product \cdot y = 1\) ,那么我们称\(number\ ...
- uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题
[清华集训2014]矩阵变换 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...
- AC日记——【清华集训2014】奇数国 uoj 38
#38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...
- UOJ#46. 【清华集训2014】玄学
传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...
- 清华集训2014 sum
清华集训2014sum 求\[∑_{i=1}^{n}(-1)^{⌊i√r⌋}\] 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\). 吼题解啊 具体已经讲得很详细了 ...
- [BZOJ3816][清华集训2014]矩阵变换(稳定婚姻问题)
3816: 矩阵变换 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 803 Solved: 578[Submit][Status][Discuss] ...
- [UOJ 41]【清华集训2014】矩阵变换
Description 给出一个 $N$ 行 $M$ 列的矩阵A, 保证满足以下性质: $M > N$. 矩阵中每个数都是 $[0, N]$ 中的自然数. 每行中, $[1, N]$ 中每个自然 ...
- UOJ#41. 【清华集训2014】矩阵变换 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ41.html 题解 首先写个乱搞: 一开始每一行都选择第一个非0元素,然后,我们对这个方案不断做更新,直到 ...
随机推荐
- Tableau 群集部署
由于公司连续两个月月底Tableau服务器过载崩溃,因此有了搭建Tableau服务器群集的想法.目前还在测试阶段,所以做一步写一步了. 目录: 一.安装和配置工作服务器 二.其他参考文档 一. 安装和 ...
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛( dp )
状压dp dp( x , S ) 表示最后一个是 x , 当前选的奶牛集合为 S , 则状态转移方程 : dp( x , S ) = Σ dp( i , S - { i } ) ( i ∈ S , ...
- CentOS6.5安装MySQL5.7详细教程
注:文中所写的安装过程均在CentOS6.5 x86下通过测试 主要参考博文: https://segmentfault.com/a/1190000003049498 http://www.th7.c ...
- VS2008非托管C++调用wcf(WebService)服务
在Visual Studio 2008以及以后版本中,微软停止了非托管C++的直接WebService引用.不过ATL Server代码已经托管到开源网站上,我们可以找到ATL Server的源代码, ...
- hdoj 2222
http://acm.hdu.edu.cn/showproblem.php?pid=2222 第一道 AC自动机.....trie树的建立 和 AC自动机的查询,,可作模版... 解题思路:AC的应用 ...
- Ubuntu基本设置
(1) 为了启用 root 帐号 (也就是 设置一个口令) 使用: sudo passwd root 1.设置IP, 终端输入 sudo gedit /etc/network/interfaces ...
- bootstrap基础知识
Bootstrap是Twitter推出的一款简洁.直观.强悍的前端开发框架. Bootstrap基于 HTML.CSS.JAVASCRIPT.它由Twitter的设计师Mark Otto和Jacob ...
- 转:你真的懂得JS吗?
题目1 if (!("a" in window)) { var a = 1; } alert(a); // undefined, ~~~所有全局变量都是window的属性,声明语句 ...
- Python中单引号、双引号和三引号的区别
ython单引号.双引号和三双引号的区别 python字符串通常有单引号('...').双引号("...").三引号("""..."&quo ...
- ALEXANDER WANG 北京旗舰店开业活动
ALEXANDER WANG 北京旗舰店开业活动-搜狐女人 ALEXANDER WANG 北京旗舰店开业活动