我從USACO培訓擠奶(USACO):錯誤的結果在很大程度上輸入測試用例
三個農民每天早晨和頭部上升5點的穀倉牛奶三頭奶牛做擠奶問題。第一個農民在時間300開始擠奶(在上午5點之後以秒計量)並且在時間1000結束。第二個農民在時間700開始並且在時間1200結束。第三個農民在時間1500開始並且在時間2100結束。至少有一個農民擠牛的最長連續時間是900秒(從300到1200)。在所有擠奶的開始和結束之間沒有進行擠奶的最長時間是300秒(1500減去1200)。
你的任務是編寫一個程序,將檢查開始 列表和結束時間爲N(1 < = N < = 5000)農民擠奶ñ奶牛和 計算(以秒爲單位):
的最長的時間間隔至少有一頭牛被擠奶。最長的時間間隔(擠奶開始後),在此期間沒有牛被擠奶。
我在一個TreeMap保存輸入後試圖直接的辦法,以便通過
i1 = tm.firstKey();// first key - tm is the treemap with values sorted by starting time
i2 = tm.get(tm.firstKey());// firstvalue
longest_conti = i2 - i1;
x=i2;
// to find longest time interval at least one cow was milked.
for (Map.Entry<Integer, Integer> m : tm.entrySet()) {
i3 = m.getKey();
i4 = m.getValue();
t = i4 - i3; // a farmers time interval
if (t >= longest_conti))
longest_conti = t;
if(i3>x)
{
i1=i3;
x=i4;
}
else
{longest_conti = longest_conti > (i4 - i1) ? longest_conti : (i4 - i1);
x=i4>x?i4:x;
}
System.out.println(longest_conti);
}
// to find the longest time interval in which no cows were being milked
for (Map.Entry<Integer, Integer> m : tm.entrySet()) {
i3 = m.getKey();
i4 = m.getValue();
if (i3 > i2) {
longest_no = longest_no > (i3 - i2) ? longest_no : (i3 - i2);
}
if(i2<i4)
i2=i4;
}
我收到了前7個測試用例正確的答案,但在8日的測試案例的開始時間排序有5000個輸入失敗(這也只是找到最長的時間間隔,這就是爲什麼我分開找到兩個時間間隔)。任何人都可以解釋我在哪裏犯錯誤(請在給出解決方案之前幫助我解釋代碼中的錯誤)。
歡迎來到Stack Overflow!它看起來像你需要學習使用調試器。請幫助一些[互補調試技術](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。如果您之後仍然有問題,請隨時返回更多詳情。 –
您發佈的代碼非常難以閱讀。如果你想獲得幫助,我建議正確格式化並給變量賦予更多有意義的名稱。 – kraskevich
@kraskevich我做了一些修改......請再看一遍。其他人只是用來保存價值的臨時變量。 –