清华集训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元素,然后,我们对这个方案不断做更新,直到 ...
随机推荐
- [译]Stairway to Integration Services Level 4 - 增量更新数据
在本文中, 我们说下增量更新数据:即将数据源中更新了的数据替换掉目标表中对应的数据. 更新代码 操作之前我们先把目标表e (dbo.Contact). 的数据改掉 Use AdventureWorks ...
- support STL Viewer with WordPress On SAE
由于SAE不支持本地代码目录写入, 我把WordPress的uploads路径改到了Storage中, 使用Domain来存放非代码资源. 这导致STL Viewer插件无法正常使用. 解决方法: 把 ...
- jquery选择器控制Html元素
1.JQuery中有addClass,removeClass,toggleClass addClass(class):为每个匹配的元素添加指定的类名 removeClass(class):从所有匹配的 ...
- mysql root密码重置
1.修改my.cnf #位置一般是 /etc/my.cnf 2.重启mysql服务 service mysqld restart 3.进入mysql mysql -uroot -p 然后直接回车 4. ...
- 入门前端之HTML
本文内容: HTML概念 HTML元素 HTML属性 HTML标题 HTML段落 HTML格式化 HTML样式 HTML 链接 HTML 图像 HTML 表格 HTML 列表 HTML 块 HTML ...
- linux系统调用和库函数调用的区别(转)
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).可以参考<Linux程序设计>(英文原版为<Beginning ...
- cocos2dx进阶学习之场景切换
背景 在学习马里奥时,我们学习到从菜单场景到游戏场景的切换,代码如下 void CMMenuScene::OnStartCallBack( CCObject *pSender ) { CCDirect ...
- Average(模拟)
Average Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
- ios8 swift开发:显示变量的类名称
var ivar = [:] ivar.className // __NSDictionaryI var i = 1 i.className // error: 'Int' does not have ...
- FFmpeg源码结构图 - 解码
===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...