poj 3104(二分,注意int类型的取值范围)
2011-06-05 19:18
169 查看
在0和最大值之间二分查找时间,因为数据太多了,必须二分来求。。。。。。在二分的时候如果是int类型的变量,会让mid=(left+right)/2;时超出int范围,所以需要用64位的变量来写。。。
#include <iostream> #include<cstdio> using namespace std; int a[100010]; int main() { int n,k,i,maxw=-1; while(scanf("%d",&n)!=-1){ maxw=-1; for(i=0; i<n; i++){ scanf("%d",&a[i]); if(a[i]>maxw) maxw=a[i]; } scanf("%d",&k); if(k==1){ printf("%d/n",maxw); continue; } else{ long long l=0,r=maxw,mid,sum=0; while(l<=r){ mid=((l+r)>>1); sum=0; for(i=0; i<n; i++) if(a[i]>mid){ sum+=((a[i]-mid)/(k-1)); if((a[i]-mid)%(k-1)!=0) sum++; } if(sum>mid) l=mid+1; else r=mid-1; } printf("%lld/n",l); } } return 0; }
相关文章推荐
- C语言中基本类型char、short、int、long等类型的取值范围
- C语言中基本类型char、short、int、long等类型的取值范围
- (JAVA & C)数据类型取值范围——short int long float double等
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围
- 打印signed 及unsigned限定的char short int 及long类型变量的取值范围
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围
- int类型取值范围由来
- C# int 类型在32/64位环境下取值范围无变化
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围 及varchar
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围
- 练习2-1 编写一个程序一确定分别由signed及unsigned限定的char,short,int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。通过直接计算来确定浮点类型的取值范围是一项难度很大的任务。
- int 类型的取值范围
- 为什么Int类型的取值范围是2的31次方减1
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围
- int 类型的取值范围
- MySQL的数据类型int、bigint、smallint 和 tinyint取值范围
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围
- 编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现