头条的笔试题
测试的原因只做了2道,都是一次过了,感觉是在考察数据结构,没有算法,数据结构用对了就是遍历一遍数出来。看懂数据结构了,就很简单了,贴出来分享下自己的想法。
串珠:
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<iterator>
using namespace std;
int main()
{
int n, m, c;
cin >> n >> m >> c;
vector<set<int>>record(c+1);
string temp;
int num;
int cx;
for (int i = 0; i < n; i++)
{
cin >> num;
for (int j = 0; j < num; j++)
{
cin >> cx;
record[cx].insert(i);
}
}
int result = 0;
for (int i = 1; i < c+1; i++)
{
int last = 0;
for (set<int>::iterator s = record[i].begin(); s != record[i].end();s++){
if (s != record[i].begin() && (*s) - last <m)
{
result++;
break;
}
last = *s;
}
if (record[i].size() >1 && (*(record[i].begin()) == 0) && last == n-1){
result++;
}
}
cout << result << endl;
system("pause");
return 0;
}
喜好的:
int main(){
int n;
map<int, set<int>> record;
cin >> n;
int tem;
for (int i = 0; i < n; i++)
{
cin >> tem;
record[tem].insert(i+1);
}
int q;
cin >> q;
vector<int>result(q);
int l, r, k;
int num = 0;
for (int i = 0; i < q; i++)
{
cin >> l >> r >> k;
num = 0;
for (set<int>::iterator s = record[k].begin();s != record[k].end(); s++)
{
if ((*s) >= l && (*s) <= r){
num++;
}
}
result[i] = num;
}
for (int i = 0; i < q; i++)
{
cout << result[i] << endl;
}
return 0;
}
#字节跳动#


