2010年4月8日 星期四

Problem 10465 Homer Simpson,吃漢堡

說明一下我解題的步驟 - ( n: 吃 Krusty 漢堡時間,m: 吃新漢堡時間,t:時間 )
1. 將數值調整:
if (m < n)
{
tmp = n;
n = m;
m = tmp;
}
2. 先將時間 t 都分配到時間少的漢堡,順便紀錄剩餘時間:
eatNum = t / n;
t %= n;
recordT = t;
3. 若有剩餘時間,則把時間試著累加 n,看看是否能整除 m,或者縮短剩餘時間,如果兩種情況發生一種,就把時間退還,再把這些時間分配到時間多的漢堡:
if (t)
{
for (i = 1; i <= eatNum; i ++)
{
if ((t + i*n) % m == 0)
{
t += i*n;
eatNum -= i;
break;
}
if ((t + i*n) % m < recordT)
{
recordI = i;
recordT = (t + i*n) % m;
}
}
if (recordI && t % m ) t += recordI * n, eatNum -= recordI;
eatNum += t / m;
t %= m;
}
4. 最後,印出、上傳、等 AC:
printf("%d", eatNum);
if (t) printf(" %d", t);
printf("\n");

By David.K

p10465題目連結
回ACM題庫目錄
回首頁

沒有留言: