UVa 10474 - Where is the Marble?【排序和检索】
2015-10-24 11:49
387 查看
原题网址:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1415
思路,先排序,然后二分搜索不小于某个值的那个数的位置,如果这个位置和这个数相等,那么就找到了,否则没有,对应输出结果!
个人推荐 用lower_bound函数,个人习惯自己构造二分函数了......
因为自己的变量重复定义了,导致程序一直运行错误,纠结了好一会,一段时间不敲代码,还真是忘了,被低级错误困扰....好好学习吧!
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1415
思路,先排序,然后二分搜索不小于某个值的那个数的位置,如果这个位置和这个数相等,那么就找到了,否则没有,对应输出结果!
个人推荐 用lower_bound函数,个人习惯自己构造二分函数了......
#include<stdio.h> #include<algorithm> using namespace std; int n,m,x[10005],k=0; int search(int s)//二分 { int l=0,r=n; while(l<r) { int mid=(l+r)>>1; /*if(x[mid]==s) { return mid; }*/ if(x[mid]>=s) { r=mid; } else { l=mid+1; } } return r;//这个是第一个不小于指定的数的下标 } void slove() { sort(x,x+n); printf("CASE# %d:\n",++k); for(int i=0;i<m;++i) { int tp,p; scanf("%d",&tp); p=search(tp); if(x[p]==tp) { printf("%d found at %d\n",tp,p+1); } else { printf("%d not found\n",tp); } } } int main() { //freopen("shuju.txt","r",stdin); while(scanf("%d%d",&n,&m),n|m) { for(int i=0;i<n;++i) { scanf("%d",x+i); } slove(); } return 0; }
因为自己的变量重复定义了,导致程序一直运行错误,纠结了好一会,一段时间不敲代码,还真是忘了,被低级错误困扰....好好学习吧!
相关文章推荐
- leetcode 227: Basic Calculator II
- 九度OJ 1131:合唱队形 (DP、最长上升下降序列)
- 41.Remove Nth Node From End of List
- 九度OJ 1131:合唱队形 (DP、最长上升下降序列)
- STL之hashset实现
- PHP 高级编程之多线程-消息队列
- 恒流源
- UVALive 7147 World Cup(2014 Regionals 2014 :: Asia - ShangHai)
- iOS 购物车示例
- Java-ServletResponse-ServletResponseWrapper
- Java-ServletResponse-ServletResponseWrapper
- 记住:enter键也会算作一个字符
- Win32_SoundDevice 声卡 的参数说明
- 线性表
- JSP实现从不同服务器上下载文件的方法
- 如何将Excel导入到数据库
- iOS 即时视频和聊天(基于环信)
- 九度OJ 1130:日志排序 (排序)
- Win32_CDROMDrive 光驱 的参数说明
- swift:创建滚动视图的图片轮播器