私の名前のハンマーは、薬剤です。テロリスト香港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;
}