某社团开展了一个“快闪”相亲活动,活动规则如下:
社团负责人将所有人分为两组,并收集了每个人对另外一组的所有人的好感度;
然后社团负责人会随机地在两组各抽取一个人,询问他们是否愿意一起去约会;
所有人对一开始的两次询问一定会拒绝;
从第三次询问开始,如果询问的人的好感度大于这个人之前的两个没能牵手的人,则接受,否则拒绝;
只有两个人同时接受,约会才成立。
约会成立后,后面的询问一律拒绝。
现在给出好感度和每次询问的两个人,请你帮忙计算一下最终有哪些人可以去约会了。
输入格式:
输入第一行是三个数字 N,M,Q (1 ≤ N,M ≤ 100, 1 ≤ Q ≤ 500), 表示分成的两组里,第一组有 N 个人,第二组有 M 个人,共有 Q 次询问。
接下来 N 行,每行 M 个数,第 i 行的第 j 个数表示第一组的第 i 个人对第二组的第 j 个人的好感度数值。数字的绝对值不超过 100。
再接下来的 M 行,每行 N 个数,第 i 行的第 j 个数表示第二组的第 i 个人对第一组的第 j 个人的好感度数值。数字的绝对值同样不超过 100。
最后有 Q 行,每行两个数字 x,y,表示主持人询问第一组的第 x 个人和第 y 个人去不去约会。
每一组内人的编号从 1 开始。
注意: 如果同一对人被询问两次,会被当成两对人处理。
输出格式:
输出若干行,每行两个数 a,b,表示第一组的第 a 个人和第二组的第 b 个人约会成功。顺序按照询问顺序的先后。如果没有一对能约会成功,则输出一行 PTA is my only love。
输入样例:
3 4 12
8 9 1 2
3 4 8 5
1 8 2 9
8 6 2
8 4 1
5 8 7
7 2 8
3 1
2 3
3 3
1 3
2 1
1 4
1 1
2 4
3 2
2 2
1 2
3 4
输出样例:
1 1
3 4
思路:没什么好说的,模拟题,认真读读,已经有伴的后面询问一律拒绝(不输出)
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,q,flag;
struct peo1
{
int cnt=0; //拒绝过几人
int favor[110]; //对另外一组每个人好感度
int down[501]; //对已经拒绝的人的好感度
int partner; //现任伴侣
}p1[101];