【来源】
题目3 : Reduce inversion count
【分析】
直接计算,暴力穷举。
【代码】
#include <iostream>
#include <string>
using namespace std;
int countRP(int* nums, int n)
{
int count = 0;
for (int i = 0; i < n; ++i){
for (int j = i + 1; j < n; ++j){
if (nums[j] < nums[i]){
++count;
}
}
}
return count;
}
int main()
{
string s;
while (cin >> s){
int size = (s.size() + 1) / 2;
int* nums = new int[size];
int count = 0;
for (int i = 0; i < s.size(); i += 2){
nums[count++] = s[i]-'0';
}
int rp = countRP(nums, size);
if (!rp){
cout << rp << endl;
}
else{
int min = rp;
for (int i = 0; i < size; ++i){
for (int j = i + 1; j < size; ++j){
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
int newcount = countRP(nums, size);
if (newcount < min){
min = newcount;
}
t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
}
cout << min << endl;
}
delete[] nums;
}
system("pause");
return 0;
}
【点评】
本题未作优化,采用暴力穷举的方法计算答案。复杂度上应该是存在问题的。估计不会通过所有的测试点。
【备注】
本代码未经过OJ提交测试,如有问题欢迎讨论。