5-1 大理石在哪

大一刚入acm,相比于那些从中学甚至从小学就开始玩竞赛的acmer,我不知道差到哪里去了,但没关系,即使自己没有基础,没有天赋,坚持下去,思维总会有一定的提高,运气好说不定可以去打打铁。

http://acm.hust.edu.cn/vjudge/contest/128220#problem/A
例题:
大理石在哪儿
现有N个大理石,每个大理石上写了一个非负整数、首先把各数从小到大排序
然后回答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要
回答哪个大理石上写着x。排序后的大理石从左到右编号为1~N。(在样例中,为了
节约篇幅,所有大理石的数合并到一行,所有问题也合并到一行。)

样例输入:
4 1
2 3 5 1
5
5 2
1 3 3 3 1
2 3

样例输出:
CASE# 1:
5 found at 4
CASE# 2:
2 not found
3 found at 3

这是小白书第五章第一题 主要让我们熟悉sort lower-bound.是一道水题,但我仍犯了不少错。

1 忘记定义数组大小 之前在考虑开到多大 之后忘了开...

2 忘记了输出时的\n 格式问题

3 lower_bound 忘了最后减去-1

4 printf 的时候忘了p要加1 (数组从0开始)

5 另外case不能作为变量名 我忘了...

#include
using namespace std;
const int maxn = 10000;

int main() {
    int n,d,a[maxn];
    int kase = 0;
    while(scanf("%d %d", &n ,&d) == 2){
        printf("case# %d:\n", ++kase);
        for(int i = 0; i < n; i++){
            scanf("%d", &a[i]);
        }
        sort(a,a+n);
        while(d--){
            int x;
            scanf("%d", &x);
            int p = lower_bound(a, a+n , x) -a;
            if(a[p] == x)printf("%d found at %d\n", x , p + 1);
            else printf("NULL\n");
        }
    }
    return 0;
}

复习第一次:输入—》排序(sort)—》找出(lower_bound(a,a+n,x)-a)—》判断—》输出

你可能感兴趣的:(5-1 大理石在哪)