我必须完成从用户获取的程序:
n - 元素数量
m - 对的数量(两个元素成对)
然后用户将写出所有对> 1和2; 1和3,...
输出应该是具有最多元素>>的数字。其中每个元素与该数字的所有其他元素成对
例如:
INPUT :(第一行n和m)下一行有成对
5 6
1 2
1 3
1 4
1 5
3 2
4 2
输出:1 2 3
或4 1 2
(1 2 3 4
不好,因为元素3和4不成对)
(1 5也不好,因为1 5对是成对的,但它们不是最大的)
我需要让这个程序在2秒内工作,n = 100000,m到300000 有没有一些有效的方法呢?我试图用所有组合做到这一点,然后我检查了所有元素是否都是成对但是它不是有效的方式(这样做100年
答案 0 :(得分:1)
如果我正确理解你的问题,你可以保留一个包含10个元素(0-9)的数组,然后为每个元素保留另一个布尔数组,看是否有一对被观察到:
bool pairs[10][10];
当你看到对(1,2)时,你可以这样做:
pairs[1][2] = true;
要确定哪个数字对最多,您可以将布尔值相加。
但是,您确实遇到了(1,2)与(2,1)相同的问题。为了解决这个问题,您可以下订单:
void order(int &a, int &b) {
if (b < a) swap(a, b);
}