A. Equalize Prices Again
https://codeforces.com/contest/1234/problem/A
题目大意:
稍微翻译下,就是求平均数/略比平均数大的数字。
AC代码:
#include <iostream>
#include <cmath>
using namespace std;
int T;
int a[105];
int n;
long long sum;
int main() {
cin >> T;
while(T--) {
cin >> n;
sum = 0;
for(int i = 0; i <n ;i++) {
cin >> a[i];
sum += a[i];
}
sum % n == 0 ? cout << (sum / n) << endl : cout << (sum / n) + 1<<endl;
}
return 0;
}
B1. Social Network (easy version)
https://codeforces.com/contest/1234/problem/B1
题目大意:
与B2区别仅在数据范围。想象一下你的QQ/WeChat,消息列表只能显示k个信息。
当一个信息不在K之内的时候,它会被置顶到第一个。
如果该信息在K之前出现了,则不做任何操作。
AC代码:(参考题解优化过)
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int main() {
int n, k;
vector<int> v;
cin >> n >> k;
int tmp;
for(int i = 0; i < n; i++) {
cin >> tmp;
if(find(v.begin(),v.end(),tmp) == v.end()) {
if(v.size() >= k) v.pop_back();
v.insert(v.begin(),tmp);
}
}
cout << v.size() << endl;
for(auto it : v) cout << it << " "; //auto迭代器
cout << endl;
return 0;
}
B2. Social Network (hard version)
https://codeforces.com/contest/1234/problem/B2
题目大意:同B1
AC题解(参考官方):
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <queue>
#include <set>
using namespace std;
int main() {
int n, k;
vector<int> v;
cin >> n >> k;
queue<int> q;
set<int> vals;
for(int i = 0; i < n ; i++) {
int tmp;
cin >> tmp;
if(!vals.count(tmp)) { //集合不存在tmp
if(q.size() >= k) { //队列长度大于等于K
int cur = q.front(); //队首
q.pop(); //队首出列
vals.erase(cur); //集合清除队首
}
vals.insert(tmp); //否则插入队列
q.push(tmp); //否则集合插入
}
}
vector<int> res;
while(!q.empty()) {
res.push_back(q.front());
q.pop();
}
reverse(res.begin(),res.end()); //反转vector
cout << res.size() << endl;
for(auto it : res) cout << it << " ";
cout << endl;
return 0;
}