我当时的思路和编码:map
#include<iostream>
#include<vector>
#include<map>
using namespace std;
int main()
{
int num;
int a;
map<int, int>mp;
cin >> num;
vector<int>input(num);
for (int i = 0; i < num; i++)
{
cin >> input[i];
mp[input[i]]++;
}
int max_count = 1;
int first_number = -1;
int second_number = -1;
for (auto it = mp.begin(); it != mp.end(); it++)
{
if (it->second > max_count)
{
max_count = it->second;
first_number = it->first;
}
}
if (max_count >= 4)
{
cout << first_number*first_number << endl;
}
else if (max_count == 1)
cout << -1 << endl;
else
{
mp.erase(first_number);
max_count = 1;
for (auto it = mp.begin(); it != mp.end(); it++)
{
if (it->second > max_count)
{
max_count = it->second;
second_number = it->first;
}
}
if (max_count == 1)cout << -1 << endl;
else
cout << first_number*second_number << endl;
}
system("pause");
return 0;
}
我的思路和编码:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int num;
cin >> num;
vector<int>input(num + 1, 0);
for (int i = 1; i <= num; i++)
{
cin >> input[i];
}
int res = 0;
for (int i = 0; i <= num; i++)
{
if (i != input[i])
{
swap(input[i], input[input[i]]);
res++;
}
}
cout << res << endl;
system("pause");
return 0;
}
第三题不知道怎么做,感觉应该要用贪心算法。