20180324今日头条编程测试题:拼接数组 + Majicc操作
2018-03-24 21:11
330 查看
师兄的做法很棒,这道题的思路是这样的,假如可以均分成i份,那么可以直接执行第二种操作i-1次,否者的话执行第一种操作。
#include <iostream> using namespace std; int main(){ int n; cin>>n; int res=0; for(int i=2;i<=n;) { { res+=(i-1); n=n/i; } else ++i; } cout<<res<<endl; return 0; }
这一道题不太好想的地方时就是如何在添加和去除一个元素的同时还可以保证平均数变大,其实仔细想想还是很简单的,对于两个set,假设平均数分别是a和b,假如a
#include <iostream> #include <unordered_set> using namespace std; double avg(const unordered_set<int>& v) { double sum = 0; for (int i : v) { sum += i; } return sum/v.size(); } int move(unordered_set<int>& a, unordered_set<int>& b) { double avg_a = avg(a), avg_b = avg(b); unordered_set<int> t; if (avg_a > avg_b) return move(b, a); for (int i : b) { { if (avg_a < i && i < avg_b && a.find(i) == a.end()) { t.insert(i); } } a.insert(t.begin(), t.end()); for (int i : t) { b.erase(i); } return t.size(); } int main() { int n, m, t; unordered_set<int> a, b; cin >> n >> m; for (int i = 0; i < n; ++i) { cin >> t; a.insert(t); } for (int i = 0; i < m; ++i) { cin >> t; b.insert(t); } int count = 0; while(true) { int r = move(a, b); if (r == 0) break; count += r; } cout << count << endl; }
相关文章推荐
- 今日头条校招2017.7.21编程3,PM、idea、程序员
- 数组元素前移问题(今日头条笔试题)
- 数组元素前移问题(今日头条笔试题)
- 今日头条编程之——K-SUM
- 今日头条2018(子数组题)
- 【今日头条2017内推笔试题】数组序列
- 今日头条2018实习生在线编程笔试题
- 旋转数组求某个值:今日头条面试题--二分法
- 今日头条 2017年秋招编程题 :“最大乘积和”
- 最大映射 今日头条编程
- 编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个
- 仿今日头条频道管理
- 20170330今日头条笔试题
- 黑马程序员之C#编程基础学习笔记:将一个字符串数组输出为|分割的形式,比如“梅西|卡卡|郑大世"
- java 编程数组的使用
- 今日头条算法原理
- 头条信息3秒切换以及json解析数组
- html仿今日头条数据列表
- 今日头条架构演进之路——高压下的架构演进专题
- 今日头条首次公布算法原理