AKSZ-二分算法
2024-03-31 17:33:01
发布于:广东
竞赛技巧
文件读写
//data.in输入文件名 , data.out输出文件名
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
//主程序
fclose(stdin);
fclose(stdout);
读入技巧
关闭同步流(cin党必备)
ios::sync_with_stdio(0);
cin.tie(0);
最快读入,混数据点(n>1e6)
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();}
}
int main(){
n=read();
for(int i=1;i<=n;i++)a[i]=read();
}
随机数生成
int main(){
mt19937 rnd(time(NULL));
int x=1+rnd()%1000;
cout<<x<<endl;
}
//1.只能敲暴力
//2.先敲正解,调试过样例,文件过大样例
//3.写暴力对拍,生成随机测试数据,有错改错
//4.检查是否写上freopen();
二分查找
模板
while(l<=r){
int mid=(l+r)/2;
if(check(mid)){
ans=mid;
r=mid-1;
}
else{
l=mid+1;
}
}
lower_bound()和upper_bound()
//lower_bound()
//适用于 升序数组
//lower_bound(数组下标开头,数组结尾下标+1,待查元素)-数组第0个下标开头
//返回值 是第一个大于等于 待查元素 的下标
//找不到输出n+1
//upper_bound()
//适用于 升序数组
//upper_bound(数组下标开头,数组结尾下标+1,待查元素)-数组第0个下标开头
//返回值 是第一个大于 待查元素 的下标
原码补码反码
正数的原码:最高位(符号位)为0;
负数的原码:最高位为1
正数的反码和原码相同
负数的反码除符号位,每一位取反
正数的补码和原码相同
负数的补码在反码的基础上加1
这里空空如也
有帮助,赞一个