uva 10474
来源:互联网 发布:梅雨知时节的作品 编辑:程序博客网 时间:2024/04/29 17:24
题目大意: 现在有N个大理石,每个大理石上写了一个非负整数。首先把各数从小到大排序,然后回答Q个问题. 每个问题问是否有一个大理石写着某个整数x,如果是,还要回答那个大理石写着整数x,排序后的大理石从1~N编号。
题目分析:
排序查找,套二分查找的模板
#include <iostream>#include <set>#include <algorithm>#include <cstdio>using namespace std;int bsearch(int *A, int x, int y, int v){ int m; while(x < y){ m = x + (y-x)/2; if(A[m] >= v) y = m; else x = m+1; } return x;}int a[10100], b[10100];int main(){ int n, q; int cas = 0; while(scanf("%d%d", &n, &q) != EOF){ if(!n && !q) break; for(int i = 0; i < n; ++i){ scanf("%d", &a[i]); } for(int i = 0; i < q; ++i){ scanf("%d", &b[i]); } sort(a, a+n); printf("CASE# %d:\n", ++cas); for(int i = 0; i < q; ++i){ printf("%d ", b[i]); int t = bsearch(a, 0, n-1, b[i]); if(a[t] == b[i]) printf("found at %d\n", t+1); else printf("not found\n"); } }}
这里补充STL的用法:
STL lower_bound作用是查找大于或等于x的第一个位置;
#include <cstdio>#include <iostream>#include <algorithm>#include <vector>using namespace std;int N, Q;int main(){ int cas = 0; vector<int> iv; while(scanf("%d%d", &N, &Q) != EOF && (N || Q)){ int v; for(int i = 0; i < N; ++i){ scanf("%d", &v); iv.push_back(v); } cout << "CASE# " << ++cas << ':' << endl; sort(iv.begin(), iv.end()); for(int i = 0; i < Q; ++i){ int num; scanf("%d", &num); int p = lower_bound(iv.begin(), iv.end(), num) - iv.begin(); if(iv[p] == num) printf("%d found at %d\n", num, p+1); else printf("%d not found\n", num); } iv.clear(); }}
0 0
- uva - 10474
- UVA 10474
- UVA 10474
- uva 10474
- uva 10474
- uva 10474
- uva-10474
- uva----10474
- uva 10474
- UVa 10474
- uva-10474
- uva 10474
- uva 10474
- Uva 10474
- uva 10474
- UVA 10474
- UVA 10474
- UVa 10474
- java中的debug使用
- Node.js开发入门—Express里的路由和中间件
- SAP固定资产期初导入检查
- 【C++基础之一】C++ 虚函数表解析
- k780数据解析测试
- uva 10474
- 时光切片—我是海康人
- HDU 5316 Magician(线段树 区间合并)
- springmvc 注解的适配器和映射器的配置
- python读写配置文件
- 常用模板总结(持续更新)
- iOS开发 - App程序启动原理
- UVA 10905 Children's Game
- GridView实现类似listview中divider分割线