题目

算法 稳定婚姻系统(其实就是贪心)

一个方案不合法,当且仅当下面这种情况:

设第\(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 矩阵变换的更多相关文章

  1. 清华集训2014 day2 task1 简单回路

    题目 如题. 算法 就是刚学习的插头DP. 从前往后和从后往前分别进行一次DP. 要点 合法的括号序列只有103个 如何合并两次dp的信息 一开始犯傻了,以为当且仅当两个轮廓线的状态相同才是合法的方案 ...

  2. 清华集训2014 day1 task3 奇数国

    题目 题目看起来好像很难的样子!其实不然,这是最简单的一道题. 算法 首先要注意的是: \(number \cdot x + product \cdot y = 1\) ,那么我们称\(number\ ...

  3. uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题

    [清华集训2014]矩阵变换 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...

  4. AC日记——【清华集训2014】奇数国 uoj 38

    #38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...

  5. UOJ#46. 【清华集训2014】玄学

    传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...

  6. 清华集训2014 sum

    清华集训2014sum 求\[∑_{i=1}^{n}(-1)^{⌊i√r⌋}\] 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\). 吼题解啊 具体已经讲得很详细了 ...

  7. [BZOJ3816][清华集训2014]矩阵变换(稳定婚姻问题)

    3816: 矩阵变换 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 803  Solved: 578[Submit][Status][Discuss] ...

  8. [UOJ 41]【清华集训2014】矩阵变换

    Description 给出一个 $N$ 行 $M$ 列的矩阵A, 保证满足以下性质: $M > N$. 矩阵中每个数都是 $[0, N]$ 中的自然数. 每行中, $[1, N]$ 中每个自然 ...

  9. UOJ#41. 【清华集训2014】矩阵变换 构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ41.html 题解 首先写个乱搞: 一开始每一行都选择第一个非0元素,然后,我们对这个方案不断做更新,直到 ...

随机推荐

  1. [C#参考]byte数组和Image的相互转换

    功能需求 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组在内存中操作. 2.把内存中的byte数组转换成Image对象,赋值给相应的控件显示. 3.从图片byte数组得到 ...

  2. 高质量程序设计指南C/C++语言——C++/C编译预处理

    C++/C的编译预处理器对预编译伪指令进行处理后生成中间文件作为编译器的输入,因此所有的预编译伪指令都不会进入编译阶段.预编译伪指令一般都以#打头,且其前面只能出现空白字符.预编译伪指令不是C++/C ...

  3. QMessageBox 用法

    案例一:QMessageBox msgBox;msgBox.setText("The document has been modified.");msgBox.setInforma ...

  4. QT学习 之 三维饼图绘制

    QT里没有相应统计图形的绘制组件 只有手工自己画 效果如图 void aaq::paintEvent( QPaintEvent* ev ) { QPainter painter(this); // 去 ...

  5. [WPF疑难] 继承自定义窗口

    原文 [WPF疑难] 继承自定义窗口 [WPF疑难] 继承自定义窗口 周银辉 项目中有不少的弹出窗口,按照美工的设计其外边框(包括最大化,最小化,关闭等按钮)自然不同于Window自身的,但每个弹出框 ...

  6. BZOJ 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场

    题目 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 491  S ...

  7. poj 2245 Lotto(dfs)

    题目链接:http://poj.org/problem?id=2245 思路分析:无重复元素组合组合问题,使用暴力枚举法,注意剪枝条件. 代码如下: #include <iostream> ...

  8. C# L该系统的应用istView简单的图像浏览器

    最近有同学问我怎么用ListView加载图像列表,在...前面"C#系统中的应用"于TreeView+ListView+ContextMenuStrip控件实现树状图显示磁盘文件夹 ...

  9. html 中的块级元素 内联元素

    上一个礼拜,做crm项目,使用的大部分都是js,nodejs,ajax 的内容,但是今天我想写写关于html中的块级元素和内联元素 的东西. 首先,html 中的块级元素 内联元素 我们可以看到,这两 ...

  10. Apple Watch程序开发30分钟秒懂

    苹果公司Apple Watch智能手表正在备受追捧,迅速掌握Apple Watch的APP架构,环境搭建,及实例开发将会让开发者占尽先机.我赢职场全国首发,30分钟玩转Apple Watch应用开发实 ...