내 이름을 망치는 에이전트입니다. 테러리스트 홍콩 Lianshun 체포 바이트 비트 거리 매복 : 난 그냥 임무를 받았다. 그리고 내가 제안, 다른 두 요원이 함께 행동
우리는 N에서 선택한 1.3 매복 사이트는 비트 거리 건물 바이트.
2. 서로 돌봐하기 위해, 우리는 D.를 초과하지 않는 두 개의 에이전트 사이의 먼 거리를 결정
나는 특히 야옹 천재! 정확한 계산 한 후, 우리는 X 형 프로그램에서 가능한 매복을 선택했다입니다. 이 프로그램은 절대 안전한, 흔들어, Konglian 순!
......
나는 결코 예상하지 계획 또는 실패 홍콩 Lianshun 코스프레 순위에 혼합 메이드로 옷을 입고 거리를 치고 바이트를 탈출했다. 비난 그의 변장 양 Guo를 찾을 수 없습니다 또한 온, 즉, 너무 성공!
질문을 들어보세요 : N (매복 지점으로 건물 선택할 수), D (가장 먼 두 개의 에이전트 최대 사이의 거리) 및 옵션 아키텍처 좌표를 제공,이 작업에서 계산, 대형 망치 부대 얼마나 많은 매복 선택.
참고 :
1. 두 에이전트는 같은 장소에 매복 수 없습니다
하지 인한 재사용 "에이전트 간의 교환 위치"로 즉, 만 영향 동일한 위치의 조합 (A, B, C)는, 방법 간주 2. 세 에이전트 동등
설명을 입력합니다 :
第一行包含空格分隔的两个数字 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)
나는 매우 영리한 방법으로 의견을 모방 여기에 메모를 만들 생각 때문에이 질문은, 내 첫번째 생각하지 않습니다.
일반적인 생각은 : 고정 된 위치 나 D 미만의 거리 전 (전 상기 제 위치 임) (I - J) 피크의 두 지점
#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;
}