BOJ 437 大家一起点外卖
来源:互联网 发布:电脑版音效软件 编辑:程序博客网 时间:2024/05/08 12:40
题意:给出一堆数据和m,求出是否有两个数的和为m,如果有,输出两个差的绝对值最小的两个数。
思路:记录出现的数字,对于每个数字a,查询是否前面的数字是否有b = m - a,如果有比较差的绝对值。注意m-a>0;
这里要注意一点,因为数据比较多,如果用map存的话,复杂度为nlongn,铁定会超时,所以直接用数组去存,内存也够。
代码:
#include <cstdio>#include <algorithm>#include <map>#include <cstring>#include <cstdlib>using namespace std; const int MAX = 2000100; const int INF = 0x3f3f3f3f; int d[MAX]; template <class T>inline bool read( T &n){ T signal = 1; T x = 0; char ch = getchar(); while((ch < '0' || ch > '9') && ch != EOF && ch != '-') ch = getchar(); if(ch == EOF) return false; if(ch == '-') signal = -1,ch = getchar(); while(ch >= '0' && ch <= '9'){ x *= 10; x += ch -'0'; ch = getchar(); } n = signal * x; return true;} int main(void){ int T; scanf("%d", &T); while(T--){ memset(d,0,sizeof(d)); int n,m; scanf("%d%d", &n,&m); int res = INF; for(int i = 0 ; i < n ; ++i) { int tmp; read(tmp); if(m - tmp > 0 &&d[m - tmp] > 0) { if(res == INF) res = tmp; else if(abs(m - 2 * res) > abs(m - 2 * tmp)){ res = tmp; } } d[tmp]++; } if(res == INF) printf("Sad\n"); else { int mm = max(res,m -res); int nn = min(res,m -res); printf("%d %d\n",nn,mm); } } return 0;}
0 0
- BOJ 437 大家一起点外卖
- 大家一起点外卖
- 2014新生暑假个人排位赛04 A. 大家一起点外卖
- 大家一起看看,给点意见
- 大家一起练小人!
- 大家一起交流
- 大家一起重新抗日
- 大家一起交流探讨
- 大家一起编程吧
- 大家一起做游戏
- 大家一起番茄吧!
- 大家一起交流
- 大家一起过圣诞
- 欢迎大家一起学习
- 外卖
- 好音乐大家一起听!
- 心情不错!大家一起高兴!
- asp.net大家一起学习
- hdu1040 As Easy As A+B
- python学习1(输入/输出函数学习)
- TCP的CLOSE_WAIT状态
- 智能家居通用管理平台(四) - 进程间通信
- PHP实现的连贯操作、链式操作实例
- BOJ 437 大家一起点外卖
- 不同方式遍历Map集合
- delphi指针问题求解!!
- 在VC2010上配置GDI+(图像库)
- 3D建模和3D渲染技术专题二:windows下minGW,OPENGL开发环境的搭建和libQGLViewer的安装
- javascript学习二~运算符,条件语句,循环语句
- HDU3345:War Chess(BFS+优先队列)
- android-UI组件实例大全(十三)------消息提示框:Toast和Notification
- poj2635