HDU 6168
来源:互联网 发布:python 游戏编程 pdf 编辑:程序博客网 时间:2024/06/05 12:06
题目链接: HDU 6168 - Numbers
题目大意
数组a大小为n, 对于所有
最后将两个数组混在一起打乱, 给你打乱后的数, 求原来的a数组
思路
混合数组中最小两个数字一定是a中的数字, 因为没有比它们更小的数字来构成它们
所以用一个multset存储所有数字, 这样每次取出来都是最小的数字并且方便删除
先取出第一个数字, 放到数组a中, 并删除第一个数字
然后从multset中一直取最小的数字(*S.begin())
, 放到a数组中, 并从multset中删除它
然后循环遍历a数组所有元素, 和刚取出来的那个数字相加, 得到的数字就是b数组中的一个数字, 从multset中erese掉(S.erase(S.lower_bound(ans[cnt-1]+ans[i])); 不能erase(ans[cnt-1]+ans[i]), 这样会把所有相同的值都删掉, 我们只需要删一个)
代码
858MS 7680K
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 125250 + 100;int n, m, ans[maxn], cnt;int main(){ while(scanf("%d", &m) == 1) { multiset<int> S; for(int i=0; i<m; ++i) { int t; scanf("%d", &t); S.insert(t); } cnt = 0; ans[cnt++] = *S.begin(); S.erase(S.begin()); while(!S.empty()) { ans[cnt++] = *S.begin(); S.erase(S.begin()); for(int i=0; i<cnt-1; ++i) { S.erase(S.lower_bound(ans[cnt-1]+ans[i])); } } printf("%d\n", cnt); for(int i=0; i<cnt; ++i) printf("%d%c", ans[i], i==cnt-1 ? '\n' :' '); } return 0;}
阅读全文
1 0
- HDU 6168
- HDU 6168
- HDU 6168 Numbers(排序)
- HDU 6168 Numbers
- HDU 6168 Numbers
- hdu 6168(stl)
- hdu--6168--Numbers
- HDU 6168 Numbers
- HDU 6168 Numbers
- HDU 6168 Numbers【水题】
- hdu 6168 Numbers
- hdu 6168 Numbers【map】
- HDU 6168 Numbers
- HDU 6168-Numbers
- HDU 6168 Numbers
- hdu 6168 Numbers
- hdu-6168 Numbers
- HDU 6168 Numbers 思维
- TabLayout的简单使用
- 最长回文(Manacher算法)
- iOS- 报错(崩)[< > setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key
- Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
- 1021. Deepest Root (25)
- HDU 6168
- 安卓开发四大组件
- Kconfig文件
- 华为笔试题——循环节求和
- 使用yaf创建项目
- SSD框架训练自己的数据集
- Google面试题:M-Fraction to Recurring Decimal
- esp_iot_sdk固件函数解释
- JS常用(通用)功能(插件)