J:百度的新大廈
- 時間限制:
- 1000ms
- 內存限制:
- 65536kB
- 描述
-
繼百度搜索框大廈之后,百度又於2012年初在深圳奠基了新的百度國際大廈,作為未來百度國際化的橋頭堡。不同於百度在北京的搜索框大廈,新的百度國際大廈是一棟高樓,有非常多的樓層,讓每個樓中的電梯都能到達所有樓層將是一個極為不明智的設計。因此,設計師給出了一個特別的設計——一共大廈有m個電梯,每個電梯只有兩個按鈕,(針對第i個電梯)兩個按鈕分別可以使電梯向上或ui層向下一定di層;百度國際大廈很高,你永遠到不了頂層,也就是說電梯沒有上限,但是,電梯不可以鑽入地下,也就是說是有下限的。我們將每層樓用整數標記,為了體現IT公司的特質,我們以0作為地面這一層的標記。
如果你某天在百度國際大廈的0層,僅可以選擇m個電梯中的一個乘坐(不可以中途換電梯),請你計算,你按電梯中的按鈕n次后(每次兩個按鈕選一個按),可以到達的最低樓層數。 - 輸入
- 輸入的第一行包括兩個整數,分別為n和m(1 ≤ n ≤ 1,000,000,1 ≤ m ≤ 2,000),表示按電梯按鈕的次數和大廈中的電梯數量。接下去的m行,每行包括2個由空格分割的數字,分別表示了提供的m個電梯中的某一個的上行按鈕上升一次的層數ui和下行按鈕下降一次的層數di(1 ≤ u i,d i ≤ 1000)
- 輸出
- 輸出一個正整數,表示選用m個電梯中的一個后,在電梯里按電梯中的按鈕n次后(每次兩個按鈕選一個按),可以到達的最低樓層數。
- 樣例輸入
-
10 3 15 4 15 12 7 12
- 樣例輸出
-
13
- 提示
- 按鈕上的移動樓層數無法改變,比方說從8層向下9層是不可行的
-
#include <stdio.h> #include <stdlib.h> #include <math.h> /* author tilltheendwjx blog http://blog.csdn.net/wjh200821或者http://www.cnblogs.com/tilltheendwjx/ */ int main() { int n,m; int *a; int *b; int i=0; int reault=0; int j=0; int tmp; int low=1; int high=0; scanf("%d%d",&n,&m); high=n; int mid; a=(int *)malloc(sizeof(int)*m); b=(int *)malloc(sizeof(int)*m); for(i=0;i<m;i++) { scanf("%d%d",&a[i],&b[i]); } for(i=0;i<m;i++) { low=1; high=n; while((high-low)>2) { mid=(low+high)/2; tmp=a[i]*mid-b[i]*(n-mid); if(tmp>0) { high=mid; } else { low=mid+1; } } for(j=low;j<=high;j++) { tmp=a[i]*j-b[i]*(n-j); if(tmp>0) {break;} } if(reault==0) reault=tmp; else if(reault>tmp) reault=tmp; else reault=reault; } printf("%d",reault); //system("pause"); return 0; }
-