a題 (poj2503)
這道題很容易就想到列舉,然而列舉會浪費時間。。。所以說這道題先排序,然後再二分,執行速度嗖嗖嗖~
#include#include#include#includeusing namespace std;
const int mm=100010;
struct node
dic[mm];
char t[60];
int pos;
bool cmp(node a,node b)
int binserch(char *s)
return -1;
}int main()
scanf("%s",dic[pos++].s);
}sort(dic,dic+pos,cmp);
int num=binserch(t);
if(num>=0)
printf("%s\n",dic[num].e);
else puts("eh");
while(~scanf("%s",t))
return 0;
}
b題 (hdu1007)
求平面最近點對距離的一半,同樣列舉會超時。
#include using namespace std;
const int mm=100008;
const double oo=1e100;
struct point
poin[mm];
int tmp[mm];
int m;
bool cmpxy(point a,point b) //先對x排序,再對y排序
return 0;
}
c題今天上午說過的,注意count+=floor(len[i]/x);
#include#include#include#includeusing namespace std;
#define pi acos(-1.0)
double len[10001];
int n,f;
bool get(double x)
int main()
r=(double)sum/(f+1);
while(r-l>1e-6)
printf("%.4lf\n",l);
}}
d題 (poj2456)
乙個最大值最小化的問題,先對牛之間的距離進行排序,由c頭牛可知共有c-1個距離區間,所以所求的答案d必定是小於等於相隔最遠的兩個牛的距離差除以c-1
#include#include#includeusing namespace std;
const int mm=100010;
int f[mm];
int n,c;
int main()
}if(i==n)
right=mid-1;
else
left=mid;
mid=(left+right+1)/2;
}printf("%d\n",mid);
}return 0;
}
e題 赤裸裸的最小值最大化問題……
#include #define max 100001
int day[max];
int n,m;
int main()
low = max;
high = sum;
while(low<=high)
}if(cnt<=m)
else
low = mid+1;
}printf("%d\n",max);
}return 0;
}
f、g 兩題今天跪了,明天繼續出~
二分專題題解
題目大意為給一條直線上的n個點,讓你隨意選取c個點,然後使得這c個點兩兩之間的最小距離最大,如何選取這c個點使這個最小距離最大,輸出最大的最小距離max。先把座標排序,之後界定二分的範圍,二分的縮小範圍的條件則為當兩點距離大於所輸入的點時,s 返回s。如若s大於所處的點,說明值太小,將左界變為mid...
分巧克力題解 整數二分
兒童節那天有 k 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有 n 塊巧克力,其中第 i 塊是 hi wi 的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出 k 塊巧克力分給小朋友們。切出的巧克力需要滿足 形狀是正方形,邊長是整數 大小相同 例如一塊 6 5...
2016寒假訓練 二分
poj3104 用模擬會超時,所以考慮用二分節約時間 首先分析,實際上是每一次都是去烘乾水量最大的,風乾其他的,然後烘完再排序一下,重複這一操作,直到所有的都為1。當然,模擬顯然是會超時的。所以我們這樣考慮,我們這樣考慮,如果對於乙個時間t,我們的有一部分衣服就會自然風乾,有一部分衣服需要自己來烘乾...