7-1 电话聊天狂人 (25 分)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll Max, ans, cnt; //Max:最多通话次数 ans:通话次数最多的号码 cnt:狂人的人数
int main()
{
map<ll, ll> mp;
int n;
cin >> n;
while (n--)
{
ll a, b;
scanf("%lld", &a);
mp[a]++;
if (mp[a] > Max)
Max = mp[a];
scanf("%lld", &b);
mp[b]++;
if (mp[b] > Max)
Max = mp[b];
}
for (auto i : mp)
{
if (i.second == Max)
{
if (cnt == 0)
ans = i.first;
cnt++;
}
}
if (cnt == 1)
cout << ans << " " << Max << endl;
else
cout << ans << " " << Max << " " << cnt << endl;
return 0;
}
7-2 两个有序序列的中位数 (25 分)
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a;
int n;
cin >> n;
for (int i = 1; i <= n * 2; i++)
{
int x;
scanf("%d", &x);
a.push_back(x);
}
sort(a.begin(), a.end());
cout << a[n - 1] << endl;
return 0;
}
7-3 词频统计 (30 分)
#include <bits/stdc++.h>
using namespace std;
using psi = pair<string, int>;
map<string, int> mp;
vector<psi> a;
bool cmp(psi x, psi y)
{
if (x.second == y.second)
return x.first < y.first;
return x.second > y.second;
}
int main()
{
char c;
string s;
while (~scanf("%c", &c))
{
if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c == '_'))
{
if (c >= 'A' && c <= 'Z')
c += 32;
if (s.length() < 15)
s += c;
}
else if (c == '#' || s.length() > 0)
{
mp[s]++;
s.clear();
if (c == '#')
break;
}
}
for (auto i : mp)
{
if (i.first.length() > 0)
a.push_back(i);
}
sort(a.begin(), a.end(), cmp);
int cnt = a.size() * 0.1;
cout << a.size() << endl;
for (int i = 0; i < cnt; i++)
cout << a[i].second << ":" << a[i].first << "\n";
return 0;
}
7-4 集合相似度 (25 分)
#include <bits/stdc++.h>
using namespace std;
set<int> st[55];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
int m;
scanf("%d", &m);
while (m--)
{
int x;
scanf("%d", &x);
st[i].insert(x);
}
}
int k;
cin >> k;
while (k--)
{
int a, b;
scanf("%d %d", &a, &b);
int cnt = 0;
for (auto i : st[a])
{
if (st[b].find(i) != st[b].end())
cnt++;
}
double rate = 100.0 * cnt / (st[a].size() + st[b].size() - cnt);
printf("%.2lf%%\n", rate);
}
return 0;
}
7-5 悄悄关注 (25 分)
#include <bits/stdc++.h>
using namespace std;
string s;
set<string> st;
map<string, int> mp;
vector<string> a;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s;
st.insert(s);
}
int m;
cin >> m;
int sum = 0; //点赞总次数
for (int i = 0; i < m; i++)
{
int x;
cin >> s;
scanf("%d", &x);
sum += x;
mp[s] = x;
}
double ave = 1.0 * sum / m; //平均点赞次数
for (auto i : mp)
{
string name = i.first;
int cnt = i.second;
if (i.second > ave && st.find(name) == st.end())
a.push_back(name);
}
if (a.empty())
printf("Bing Mei You");
else
{
sort(a.begin(), a.end());
for (auto i : a)
cout << i << endl;
}
return 0;
}
7-6 单身狗 (25 分)
#include <bits/stdc++.h>
using namespace std;
int t[10005];
vector<int> a;
map<int, int> mp;
set<int> st;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int a, b;
scanf("%d %d", &a, &b);
mp[a] = b;
mp[b] = a;
}
int m;
cin >> m;
for (int i = 1; i <= m; i++)
{
scanf("%d", &t[i]);
st.insert(t[i]);
}
int cnt = 0;
for (int i = 1; i <= m; i++)
{
if (st.find(mp[t[i]]) == st.end())
{
cnt++;
a.push_back(t[i]);
}
}
sort(a.begin(), a.end());
cout << cnt << endl;
int flag = 0;
for (auto i : a)
{
if (flag)
printf(" ");
printf("%05d", i);
flag++;
}
return 0;
}
7-7 词典 (15 分)
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<string, string> mp;
int n, m;
scanf("%d %d", &n, &m);
while (n--)
{
string a, b;
cin >> a >> b;
mp[b] = a;
}
while (m--)
{
string s;
cin >> s;
if (!mp.count(s))
printf("eh\n");
else
cout << mp[s] << endl;
}
return 0;
}
7-8 中序遍历树并判断是否为二叉搜索树 (20 分)
#include <bits/stdc++.h>
using namespace std;
struct point
{
int left;
int right;
} s[1000];
void mid(int root)
{
if (root)
{
mid(s[root].left);
a.push_back(root);
mid(s[root].right);
}
}
vector<int> a, b;
int main()
{
int n, root;
cin >> n >> root;
if (n == 0)
printf("Yes\n");
else
{
int r, d, e;
for (int i = 1; i < n; i++)
{
scanf("%d %d %d", &r, &d, &e);
if (d == 0)
s[r].left = e;
else if (d == 1)
s[r].right = e;
}
mid(root);
for (int i : a)
printf("%d\n", i);
b = a;
sort(b.begin(), b.end());
int flag = 0;
for (int i = 0; i < b.size(); i++)
{
if (a[i] != b[i])
flag = 1;
}
if (flag == 1)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}