[プログラミングの質問]香港Lianshunを逮捕考えもしません

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/m1f2c3/article/details/98976722

[プログラミングの質問]香港Lianshun逮捕考えもしない
時間制限:1秒

スペースの制約:131072K

私の名前のハンマーは、薬剤です。テロリスト香港Lianshunを逮捕、バイト単位でビートストリート待ち伏せ:私は使命を受けました。そして私は、私が提案し、他の二つの薬剤がある一緒に行動します

  1. 我々はNバイトで選択された3つの待ち伏せサイトでは、ストリートの建物を打ちます。
  2. お互いの世話をするために、我々は二つの薬剤間の最も遠い距離がDを超えていないことを決めました

私は特に鳴き声は天才です!正確な計算の後、我々はX型プログラムから可能待ち伏せを選択しました。プログラムの誰にでも、それを振って、Konglian旬!
......
と思ったことはありませんか計画はコスプレのランクに混入し、メイドの格好、香港Lianshunを失敗した通りを破って、バイトエスケープ。つまり、彼の変装はあまりにも成功した非難、私も来た楊過が見つかりません!

質問を聴いてください:大きい、N(待ち伏せ点として、建物の選択番号)、D(最大遠い二つの薬剤の間の距離)と、この演算で算出任意アーキテクチャ座標を、与えられましたハンマー隊どのように多くの待ち伏せ選択。
注意:

  1. 二つの薬剤は、同じ場所で待ち伏せすることはできません
  2. 三剤は等価である:すなわち、同じ位置の組み合わせ(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);
    }
}

おすすめ

転載: blog.csdn.net/m1f2c3/article/details/98976722