MC0102房间打扫
贪心解法:统计每列0的个数,超过一半就打扫
有3个测试点会WA
cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
int res = 0;
vector<vector<char>> s(n, vector<char>(n));
vector<int> cnt(n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> s[i][j];
if (s[i][j] == '0')
{
cnt[j]++;
}
}
}
for (int j = 0; j < n; j++)
{
if (cnt[j] * 2 > n)
{
for (int i = 0; i < n; i++)
{
if (s[i][j] == '1')
{
s[i][j] = '0';
}
else
{
s[i][j] = '1';
}
}
}
}
for (int i = 0; i < n; i++)
{
bool flag = true;
for (int j = 0; j < n; j++)
{
if (s[i][j] == '0')
{
flag = false;
break;
}
}
if (flag)
{
res++;
}
}
cout << res;
return 0;
}
正确解法是哈希表
统计相同的字符串
cpp
#include <iostream>
#include <string>
#include <unordered_map>
#include <algorithm>
using namespace std;
int main()
{
unordered_map<string, int> map;
int n;
cin >> n;
int res = 0;
string s;
for (int i = 0; i < n; i++)
{
cin >> s;
map[s]++;
res = max(res, map[s]);
}
cout << res;
return 0;
}
MC0104项链
cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> s(n);
for (int i = 0; i < n; i++)
{
cin >> s[i];
}
sort(s.begin(), s.end());
int high = 0;
int low = 0;
for (int i = 0; i < n / 2; i++)
{
low += s[i];
}
for (int i = n - n / 2; i < n; i++)
{
high += s[i];
}
cout << 2 * (high - low);
return 0;
}