快速求出區間相交的長度
阿新 • • 發佈:2018-12-30
給你兩個區間[a, b]和[c, d],如果讓你求出這兩個區間的相交長度,你會怎麼做呢?不出意外的話,大多數同學就會進行分類討論,看看那個區間在前,那個區間在後,分兩種情況,然後對區間相交還是覆蓋又分了兩種情況。普通求法:
快速求法:int main() { while(~scanf("%d%d%d%d", &a, &b, &c, &d)) { int len; if(b < c || a > d) len = 0; else { //先分割槽間先後,再分割槽間相交還是覆蓋 //這就是普通做法 if(c >= a) { if(d <= b) len = d-c+1; else len = b-c+1; }else { if(b <= d) len = b-a+1; else len = d-a+1; } } printf("%d\n", len); } }
int main()
{
while(~scanf("%d%d%d%d", &a, &b, &c, &d)) {
int len;
int s = min(b, d) - max(a, c) + 1;
len = max(0, s);
printf("%d\n", len);
}
}