ネットワークオフ牛は - 逮捕コングLianshunを期待していませんでした

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

 

我々はNバイトビート・ストリートの建物の中に選択された1.3待ち伏せサイト。

2.お互いの世話をするために、我々はDを超えていない二つの薬剤の間の最も遠い距離を決めました

 

私は特にニャー!は正確な計算の後、我々はX型プログラムから可能待ち伏せを選んだ天才です。プログラムの誰にでも、それを振って、Konglian旬!

......

私は決して、期待しない計画したか失敗した香港Lianshunはコスプレのランクに混入し、メイドの格好通りを破っバイトを免れました。彼の変装を非難楊過も見つけることができない来た、あること、あまりにも成功しました!

 

質問を聴いてください:N(待ち伏せ点として、建物の選択可能な数)、D(最も遠い二つの薬剤の最大値との間の距離)と、オプションのアーキテクチャ座標が与えられ、この操作で算出し、大ハンマー隊どのように多くの待ち伏せの選択。

注意:

1.二つの薬剤は、同じ場所で待ち伏せすることはできません

すなわち、同じ位置の組み合わせ(A、B、C)は、唯一の「エージェント間スワップ位置」による方法ではないと考えることが影響を受け、再利用されている:等価であるが2. 3つのエージェント

 

 

説明を入力します。

第一行包含空格分隔的两个数字 N和D(1 ≤ N ≤ 1000000; 1 ≤ D ≤ 1000000)

第二行包含N个建筑物的的位置,每个位置用一个整数(取值区间为[0, 1000000])表示,从小到大排列(将字节跳动大街看做一条数轴)

 

出力説明:

一个数字,表示不同埋伏方案的数量。结果可能溢出,请对 99997867 取模

 

入力例1:

4 3
1 2 3 4

 

出力例1:

4

 

例1:

可选方案 (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)

 

入力例2:

5 19
1 10 20 30 50

 

出力例2:

1

 

2例:

可选方案 (1, 10, 20)

この質問は、私は非常に巧妙な方法で模倣コメントに思ったので、ここにメモしておき、私の最初の考えではありません。

一般的な考え方は次のとおり固定位置は、I D未満の距離の前に、(iは前記エージェントの位置である)は、(i - j)はピックの2点

#include<iostream>
using namespace std;
long long  fac(long long  n){
    return (n- 1)*n/ 2;
}
int main(){
    long long N, D;
    cin>>N>>D;
    long long* distance= new long long[N];
    for(int i= 0; i< N; i++)
        cin>>distance[i];
    long long  result= 0;
    for(long long  i= 0, j= 0; i< N; i++){
        while(i>= 2&&distance[i]- distance[j]> D){
            j++;
        }
        result+= fac(i- j);
    }
    cout<<result%99997867<<endl;
}

 

公開された152元の記事 ウォン称賛24 ビュー70000 +

おすすめ

転載: blog.csdn.net/weixin_41879093/article/details/104813757