네트워크 오프 소 - 체포 홍콩 Lianshun을 기대하지

내 이름을 망치는 에이전트입니다. 테러리스트 홍콩 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;
}

 

게시 된 152 개 원래 기사 · 원 찬양 24 ·은 70000 +를 볼

추천

출처blog.csdn.net/weixin_41879093/article/details/104813757