免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
[プログラミングの質問]香港Lianshun逮捕考えもしない
時間制限:1秒
スペースの制約:131072K
私の名前のハンマーは、薬剤です。テロリスト香港Lianshunを逮捕、バイト単位でビートストリート待ち伏せ:私は使命を受けました。そして私は、私が提案し、他の二つの薬剤がある一緒に行動します
- 我々はNバイトで選択された3つの待ち伏せサイトでは、ストリートの建物を打ちます。
- お互いの世話をするために、我々は二つの薬剤間の最も遠い距離がDを超えていないことを決めました
私は特に鳴き声は天才です!正確な計算の後、我々はX型プログラムから可能待ち伏せを選択しました。プログラムの誰にでも、それを振って、Konglian旬!
......
と思ったことはありませんか計画はコスプレのランクに混入し、メイドの格好、香港Lianshunを失敗した通りを破って、バイトエスケープ。つまり、彼の変装はあまりにも成功した非難、私も来た楊過が見つかりません!
質問を聴いてください:大きい、N(待ち伏せ点として、建物の選択番号)、D(最大遠い二つの薬剤の間の距離)と、この演算で算出任意アーキテクチャ座標を、与えられましたハンマー隊どのように多くの待ち伏せ選択。
注意:
- 二つの薬剤は、同じ場所で待ち伏せすることはできません
- 三剤は等価である:すなわち、同じ位置の組み合わせ(A、B、C)唯一の方法ではなくによる「エージェント間スワップ位置が」再利用されると考えることが影響します
再帰の考え方から始め、街は今、徐々にアルゴリズムを簡素化です。
+ =(長い)DP(LEN - 1)*(長)(LEN - 2)/ 2;この文に長い必要があり、それが付加されていないが100%未満であるAC
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int D = sc.nextInt();
int[] node = new int[N];
for(int i = 0; i < N; ++i){node[i] = sc.nextInt();}
long dp = 0;
int l = 0;
int r = 2;
while(l <= r && r < N){
if(node[r] - node[l] > D)++l;
else if(r - l < 2)++r;
else{
int len = r - l + 1;
dp += (long)(len - 1) * (long)(len - 2) / 2;
++r;
}
}
System.out.println(dp % 99997867);
}
}