博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 10057 - A mid-summer night's dream
阅读量:5899 次
发布时间:2019-06-19

本文共 1296 字,大约阅读时间需要 4 分钟。

  题目大意:给n个数,找一个数A使得A与这n个数的差的绝对值最小。输出A最小的可能值,n个数中满足A的性质的数的个数以及满足A性质的不同的数的个数(不必从这n个数中挑选)。

  看见绝对值就想到了数轴上点之间的距离,从寻找中位数入手。本来是打算把所有数都保存然后排序的,忽然就看到了题目上所有数都小于65536,就想到用计数排序,然后就敲啊敲,提交!正为节省了点空间而小小自得呢,就WA了... -_-|| ,再看看感觉也没什么问题,只好搜代码了,看到别人都是直接存的数然后进行处理,就想哪出问题了,看到那些重复的数就明白了,还以为用计数(开始想用游程编码来着)方法处理重复的数不错了,其实是我错了,把所有的相同的数合并时涉及到一个类似“权重”的问题,比如5个数,1,1,1,1,4,如果简单的合并成1,4就会出问题了。计数+权重的方法没什么思路,就算有让我现在去想也会变成无比麻烦的东西,还是先老老实实按套路来吧。

1 #include 
2 #include
3 #include
4 using namespace std; 5 #define MAXN 1000000+10 6 7 int num[MAXN]; 8 9 int main()10 {11 #ifdef LOCAL12 freopen("in", "r", stdin);13 #endif14 int n;15 while (scanf("%d", &n) != EOF)16 {17 for (int i = 0; i < n; i++)18 scanf("%d", &num[i]);19 sort(num, num+n);20 int left = (n-1)/2, right;21 if (n % 2) right = left;22 else right = left + 1;23 int cnt = 0;24 for (int i = 0; i < n; i++)25 {26 if (num[i] >= num[left] && num[i] <= num[right]) cnt++;27 if (num[i] > num[right]) break;28 }29 printf("%d %d %d\n", num[left], cnt, num[right]-num[left]+1);30 }31 return 0;32 }
View Code

 

转载于:https://www.cnblogs.com/xiaobaibuhei/p/3213927.html

你可能感兴趣的文章
【案例】RAID卡写策略改变引发的问题
查看>>
AFNetworking 2.5.x 网络请求的封装
查看>>
Velocity魔法堂系列三:模板与宿主环境通信
查看>>
【信息统计】dbms_stat 的文档
查看>>
嵌入式学习硬件说明
查看>>
JAVA类加载机制
查看>>
js 控制图片 幻灯片展示
查看>>
我的友情链接
查看>>
mysql 主从复制 、主主复制 大全
查看>>
数据挖掘入门到精通—R语言
查看>>
为 IBM PureApplication System 做好准备,第 3 部分: 选择数据库选项
查看>>
Linux常用命令小结
查看>>
Java创建多线程的几种方式
查看>>
MyEclipse 怎样调整字体大小
查看>>
php5安装
查看>>
稀疏表达:向量、矩阵与张量(上)
查看>>
java反射(二)
查看>>
非常不错的Jquery图片截取插件
查看>>
OCP终于考完了
查看>>
微软RemoteApp单点登陆(SSO)
查看>>