UVA.10474 Where is the Marble ( 排序 二分查找 ) 题意分析 大水题一道.排序好找到第一个目标数字的位置,返回其下标即可.暴力可过,强行写了一发BS,发现错误百出.应了那句话:基础不牢,地动山摇. 记录一下自己BS的常见错误: 1.需要传入的参数是,搜索的区间[l,r]和搜索的目标值t; 2.一般被搜索的对象以全局变量的身份出现,故不需要传参进去; 3.退出循环的条件是l < r 注意这里可没有等号; 4.若t在mid左边或等于mid,要把右坐标r移动到m的位置,…
题意:给出一列数,先排序,再查找学习了sort函数,lower_bound函数sort:可以给任意对象排序(包括自己定义的)(前提是定义好了‘<’运算符)lower_bound:查找大于或者等于x的第一个位置. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int a[maxn]; int main() {…
题目给出一系列数字,然后问哪个数字是从小到大排在第几的,重复出现算第一个. 数据范围为10000,不大,完全可以暴力,sort不会超时. 但是由于以前做比赛时也遇到这种题目,没注意看数据范围,然后暴力被hack了.之后就学会了计数排序了. 这题也用计数排序做,挺快的,代码也不长. 代码: #include <cstdio> #include <cstring> const int maxn = 10001; int num[maxn], s[maxn]; int main() {…
https://vjudge.net/problem/UVA-10474 https://blog.csdn.net/xiyaozhe/article/details/81081344 简单用法 sort(start,end) 默认是升序 实现降序: #include <functional> int a[10]={5,6,7,8,9,0,1,2,3,4}; vector <int> v(a, a+10); sort(v.begin(), v.end(),less<int&g…
我非常奇怪为什么要把它归类到回溯上,明明就是简单排序,查找就OK了.wa了两次,我还非常不解的怀疑了为什么会 wa,原来是我居然把要找的数字也排序了,当时仅仅是想着能快一点查找.所以就给他排序了,没考虑到要按给的顺序输 出答案,这次真是二了,.,看别人题解实用打表做的,那个应该是正确解法.我的耗时980ms,预计数据再大一些就 要TLE了 贴代码: #include<stdio.h> #include<string.h> #include<stdlib.h> int c…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排序 用lower_bound找就可以了. ->lower_bound,如果里面所有的数字都比x小,那么它的返回值会越界! [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] #include <bits/stdc++.h> using namespace std; const int N = 1e4; int n, q, a[N + 10]; int main() { // freopen("…
题目描述:算法竞赛入门经典例题5-1 #include <iostream> #include <algorithm> using namespace std; ; int main() { ; && n &&q){ ;i<n;i++) scanf("%d",&a[i]) ; printf("CASE# %d:\n",++k) ; sort(a,a+n); while(q--){ int x; s…
我自己写的代码 #include<iostream>#include<algorithm>using namespace std;int main(){    int N,a[100],b[100],Q,flag;    int k=1;    while(cin>>N>>Q)    {        for(int i=0;i<N;i++)        {            cin>>a[i];        }        fo…
题意:给你一组数,再给几个数问是否在一组数中. 题很简单:STL入门. 没用到STL. #include<iostream> #include<cstdio> #include<algorithm> using namespace std; ]; int main() { ; //freopen("in.txt","r",stdin); int n,m; while(scanf("%d%d",&n,&a…
题意:找输入的数在排完序之后的位置. 主要是lower_bound 函数的使用.它的作用是查找大于或者等于x的第一个位置. #include<cstdio> #include<algorithm> using namespace std; ; int main() { ; && n){ printf("CASE# %d:\n",++kase); ;i < n; i++) scanf("%d",&a[i]); so…