HDU1050 Moving tables
阿新 • • 發佈:2017-08-21
pre mod 解題思路 操作 count data- con 得到 這樣的
題目大意:在一個長走廊裏面搬桌子。走廊的兩側都是房間,把桌子從一個房間搬到還有一個房間,走廊的寬度每次僅僅同意搬一個桌子。每次搬桌子須要10分鐘,問最少多長時間辦完。
輸入:第一個數t代表測試用例,接下裏是n,表示要搬的桌子的總數,接著n行代表每一個桌子從房間i搬到房間j
輸出:最少須要的時間
解題思路:
首先考慮。給出的每次須要搬的房間號,實際情況中是可能從大的房間號往房間號小的房間搬,因此,在讀入數據時刻同一時候做一個方便接下來的處理的操作,就是保證每次都是從房間號小的朝著大的搬,結果是一樣的(由於對於占用走廊的情況是同樣的)
還有一方面,能夠想到通過進行某種處理來標示這段走廊已被占用。通過累加這樣的走廊的重疊占用情況。來得到最大的重疊數。因為1-400個房間是在走廊兩側雙向分布的,所以房間1和房間2是公用的同一段走廊,因此在累積標識的時候能夠採用一個count[205]數組。
代碼例如以下:
# include <iostream> # include <algorithm> using namespace std; int main() { //freopen("input.txt","r",stdin); int t; scanf("%d",&t); while(t--) { int n,time; scanf("%d",&n); int count[205]; memset(count,0,sizeof(count)); int i,j,x,y,s,e; for(i=1;i<=n;i++) { scanf("%d%d",&x,&y); if(x>y) { int temp; temp=x; x=y; y=temp; } s=(x+1)/2; e=(y+1)/2; for(j=s;j<=e;j++) { count[j]++; } } int maxc=0; for(i=1;i<201;i++) { if(maxc<count[i]) maxc=count[i]; } time=maxc*10; printf("%d\n",time); } return 0; }
HDU1050 Moving tables