速配游戏C/C++ 求解, 高手支招!!!

HelloAldis 2008-12-07 02:27:53
速配游戏

Time Limit: 5000MS Memory Limit: 65535KB
Total Submissions: 176 Accepted: 52

Description:

有一个速配电视节目。N位男士和N位女士要在摄像机前选出他们合适的情侣。每位女士按照其对每位男士作为配偶的偏爱程度给每位男士排名次,每位男士也按照其对每位女士作为配偶的偏好程度给每位女士排名次。这些名次不允许并列。然后每位男士将向心仪的对像求婚,经过“残酷”的竞争之后各自找到合适的情侣。
最开始的时候每位男士都没有被任何一位女士拒绝。求婚环节会经过很多轮进行,每一轮:
(1)每位男士从还没有拒绝过自己的女士中选出自己认为最理想的一个,并向她求婚。
(2)每位女士在所有这一轮中从向她求婚的男士中选出自己认为最理想的一个,并不答应,也不拒绝。她把其余向她求婚的男士都婉言拒绝掉。
经过若干轮的求婚之后,在某一轮,幸运的事情发生了:所有的女士都恰好有一个求婚者,所有的男士都找到一个心仪的对像。主持人将继续指出这个配对方式的神奇之处:没有任意的两个配对,例如男士A和女士a配对,男士B和女士b配对,使得在A心中b较a更理想,而且在b心中A比B更理想(这样A和b就会“私奔”)。因此,主持人总结说,这个配对是非常合理的。(他知道,这种情况是一定会发生的。)
主持人在节目之前已经知道男士和女士之间的偏爱情况,他想预先知道最后的匹配结果是怎么样的,能帮帮他吗?

Input:

第一行包括一个数字N(1《=N《=1000)
以下N*2行,每行有N个数字。第i+1行(1<=i《=N)表示编号为i的男士对女士们的排序(从最喜欢的到最不喜欢的)。第N+j+1行(1《=j<=N)表示编号为j的女士对男士们的排序(同样从最喜欢的到最不喜欢的)。

Output:

N行,每行包括一个数字。第i行的数字表示与编号为i的男士匹配的女士的编号。

Sample Input:

3
1 2 3
2 3 1
2 1 3
3 2 1
2 3 1
2 3 1

Sample Output:

3
2
1
...全文
147 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengnanliu 2009-02-28
  • 打赏
  • 举报
回复
#include <iostream>
#include <memory>
using namespace std;

const int N = 1001;
bool reject[N][N];
int a[N][N], xinyi[N];
int b[N][N], best[N];
int n, num;

bool fun()
{
int i,j, k;

for(i=1; i<=n; i++ )
{
for(k=1; k<=n; k++ )
{

j = a[i][k];

if( best[j] == i )
break;

if( !reject[j][i] )
{
if( best[j] == 0 )
{
++num;
best[j] = i;
}
else
{
if( b[j][i] < b[j][ best[j] ] )
{
reject[j][ best[j] ] = true;
best[j] = i;
}
else
{
reject[j][i] = true;
}
}

if( num == n )
return true;

break;
}
}
}

return false;
}

void solve()
{
scanf("%d", &n);
int i,j,t;
for(i=1; i<=n; i++ )
{
for( j=1; j<=n; j++ )
{
scanf("%d", &t);
a[i][j] = t;
}
}

for(i=1; i<=n; i++ )
{
for( j=1; j<=n; j++ )
{
scanf("%d", &t);
b[i][t] = j;
}
}

num = 0;
while( true )
{
if( fun() )
break;
}

for( i=1; i<=n; i++ )
{
xinyi[ best[i] ] = i;
}

for( i=1; i<=n; i++ )
{
printf("%d\n", xinyi[i]);
}
}

int main()
{
solve();
return 0;
}
hai040 2008-12-16
  • 打赏
  • 举报
回复
不是用题中给出的算法就行吗?
还是要分析为什么最终结果会是这样?
HelloAldis 2008-12-07
  • 打赏
  • 举报
回复
我尝试用离散数学中有向的偶图分析
但还是有问题 希望高手 指点思路算法原理
toadzw 2008-12-07
  • 打赏
  • 举报
回复
up to your climax
代码转载自:https://pan.quark.cn/s/11d565366452 【USB转I2C/IIC适配器上位机应用程序】是一种针对I2C(Inter-Integrated Circuit)通信协议而构建的工具,其通过USB端口将个人计算机转变为能够与I2C设备进行交互的控制器。该适配器使开发人员与工程师能够便捷地对遵循I2C协议的芯片执行读取和写入任务,因此在硬件构建和测试阶段能够显著提升效率,对于核实I2C接口芯片的工作性能具有特别的价值。 I2C协议是由飞利浦(现NXP半导体)于1980年代初创立的一种双线式串行总线,其目的是用于连接微控制器及其他外围设备。该协议仅需两条信号线(SDA - 数据线,SCL - 时钟线)即可完成多设备间的通信,大幅度削减了电路板上的布线需求,从而降低了生产成本。I2C协议提供多种速度等级,涵盖标准模式(100kbps)、快速模式(400kbps)以及高速模式(3.4Mbps),旨在满足不同场景下的应用要求。 Ginkgo USB转I2C适配器是这项技术的具体应用实例,它提供了一个物理接口,用于将USB端口转换为I2C端口。适配器内部装配有一个微控制器单元,该单元负责处理从USB到I2C的信号转换,并且通过USB线路向计算机传输信息,同时接收来自计算机的指令以操控I2C总线。这种设计使用户无需具备深厚的硬件知识,仅需借助上位机软件即可实现对I2C设备的操控。 Ginkgo I2C Adapter Classic是与该适配器相配套的软件,通常包含以下几项核心功能: 1. 设备识别:自动检测并建立与USB转I2C适配器的连接。 2. 总线探查:扫描I2C总线上所连接的设备地址,有助于准确定位设备的位置。 3. 读写指令...
代码转载自:https://pan.quark.cn/s/4c053f9292d9 在Android应用程序的设计与实现过程中,有时需要借助C或C++语言所具备的高性能特点,此时就必须借助Android Studio的NDK(Native Development Kit)工具来对C/C++代码进行编译,进而生成SO(Shared Object)动态链接库文件。本篇文章将详尽阐述在Android Studio环境下如何执行这一流程。 我们首先需要掌握Android Studio项目的基本组织架构。在Android Studio的`app`文件夹内,存在一个名为`src`的子文件夹,该文件夹通常包含了`main`以及其他相关源代码目录。在`main`文件夹中,除了我们常见的`java`文件夹外,还设立了一个`jniLibs`文件夹,此文件夹专门用于存储SO文件。除此之外,还有一个`jni`文件夹,它是用来存放C/C++源代码的地方。 为了实现C/C++代码的编写与编译,我们必须在`build.gradle`文件中配置NDK的支持。打开`app/build.gradle`文件,在`defaultConfig`部分中嵌入以下内容: ```groovy externalNativeBuild { ndkBuild { path src/main/jni/Android.mk } } ``` 这段内容明确指示Android Studio去何处寻找`Android.mk`文件,该文件是一种Makefile的变体,主要用于设定编译规则和编译目标。 接下来,我们需要创建`Android.mk`文件。在这个文件中,我们将明确指定源代码文件、编译选项以及要生成的库名称。一个基础的...
内容概要:本文围绕麦克斯韦旋度方程的差分形式在平面极化磁场中的应用展开深入研究,并通过Matlab代码实现相关数值仿真。研究的核心是将经典的麦克斯韦方程组转化为适用于数值计算的有限差分格式,构建离散化数学模型,进而模拟和分析平面极化条件下磁场的空间分布特征与时间演化规律。文中系统阐述了差分方法的理论基础与数学推导过程,详细说明网格划分、边界条件设定及迭代求解策略,最终利用Matlab编程实现电磁场的可视化仿真,有效验证了差分方法在求解复杂电磁场问题中的准确性与可行性。该研究不仅加深了对电磁波传播机理的理解,也为电磁器件的设计优化与工程仿真提供了可靠的数值分析手段。; 适合人群:具备电磁场与电磁波理论基础,熟悉偏微分方程数值解法,且掌握Matlab编程技能的电气工程、物理学、应用数学等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入掌握麦克斯韦旋度方程的有限差分法基本原理及其在二维平面磁场仿真中的具体实施步骤;②学习如何利用Matlab进行电磁场问题的建模、编程求解与结果可视化;③为后续开展更复杂的电磁兼容、天线设计或光子晶体等领域的数值模拟研究奠定坚实的技术基础。; 阅读建议:建议读者结合经典电磁场理论教材,透彻理解麦克斯韦方程组的物理内涵,然后循序渐进地跟进文中的差分格式推导过程,务必动手复现并调试所提供的Matlab代码,通过调整参数观察仿真结果的变化,从而深刻领悟数值方法的实质与应用技巧。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧