に私はUSACOトレーニングから搾乳牛の問題をやって搾乳牛(USACO):間違った結果が大きな入力テストケース
三農家は3頭の牛を牛乳に納屋のために毎朝とヘッド5時に上昇します。第1農家は、時間300(午前5時に測定)で牛の搾乳を開始し、時間1000で終了する。第2農家は時間700で始まり、時間1200で終わる。第3農家は時間1500で始まり、時間2100で終了する。少なくとも1人の農家が牛を搾乳していた最長連続時間は、900秒(300から1200)であった。すべての搾乳の開始から終了までの間に搾乳されなかった最長の時間は300秒(1500から1200年)でした。
:
あなたの仕事は、(1 < = N < = 5000)(秒)N牛と 計算を搾乳農家Nの開始 のリストと終了時刻を検討するプログラムを書くことです最も長い時間間隔で、少なくとも1頭の牛が搾乳された。 乳牛がいなかった時間間隔(搾乳開始後)は でした。
開始時間
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日のテストケースを取得していますのTreeMapに入力を保存した後、直接アプローチをしようとしています5000個の入力は失敗しています(それは最長の間隔を見つけることでしかないので、2つの間隔を見つけることが分かれています)。誰でも私が誤りを犯している場所を説明することができます(あなたの解決策を与える前に私のコードのエラーを説明してください)。
ようこそスタックオーバーフロー!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、もう少し詳しくお聞かせください。 –
投稿したコードは読みにくいです。私はそれを適切にフォーマットし、助けを求めたい場合は変数をより意味のある名前にすることをお勧めします。 – kraskevich
@kraskevich私はいくつかの変更を加えました...もう一度見てください。その他の変数は値を保持するための一時変数です。 –