AKSZ-二分算法
2024-04-05 13:35:03
发布于:广东
AKSZ-第三课
文件读写
freopen("data.in","r",stdin);
freopen("data.out","w",stdout)
//其他代码
fclose(stdin);
fclose(stdout);//关闭输入出流
关闭同步流
ios::sync_with_stdio(o);
cin.tie(0);
手写读入
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
随机数
freopen("data.in","w",stdout);
//随机数种子
mt19937 rnd(time(NULL));
int x=1+rnd()%10;//1~10的随机生成
//记得在编译里加-static-libgcc -std=c++11
考试诀窍
1、敲暴力
2、先敲正解,调试过样例,文件也过
3、暴力队拍
4、freopen();
二分查找
//模板一
#include<bits/stdc++.h>
using namespace std;
int n,a[105],x,ans=-1;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>x;
int l=1,r=n;
while(l<=r){
int mid=(l+r)>>1;
if(a[mid]==x){
ans=mid;
break;
}else if(a[mid]>x){
r=mid-1;
}else{
l=mid+1;
}
}
cout<<ans;
return 0;
}
lower_bound()
//只适用于升序数组
lower_bound(数组开头下标,数组结尾下标+1,x)-a;//第一个大于等于待查元素的的下标
upper_bound()
//只适用于升序数组
upper_bound(数组开头下标,数组结尾下标+1,x)-a;//第一个大于待查元素的的下标
注:找不到输出n+1
反码
只有负数的反码要取反
补码
反码+1,溢出舍弃
这里空空如也
有帮助,赞一个