大一刚入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<algorithm>
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)—》判断—》输出