CYJian 사탕 해결 보고서
다음 내용은 다음과 같습니다
그는 현재 $ $ N 벌크 사탕, 각 벌크 사탕 $의 R을 갖는 [I] -1 [I] 사탕 (L)의 각각의 단 과자 조각 [I], (L)의 + 1 개 $ 작은 조각 [I] + 1,1- [I] +2 ...... R은 [I].
그는 현재 임의로 작은 과자 조성물 사탕 자기 플래터의 각으로부터 큰 캔디, 캔디의 달콤한 선출 집합 X [1], X [2 수 ] ..... X [n]을, 구비 .
사탕 플래터 행복 지수의 정의 .
이제 물어보고 싶은 CYJian, 모든 프로그램의 행복 지수는 그는 플래터를 선택하고 얼마나? (결과 출력 응답 모듈러스 1E9 + 7)
양의 정수 (N)의 제 1 라인의 입력 벌크 사탕 수
L 자 다음의 n 개의 라인 [I], R [i]는, 응답의 개수의 출력.
샘플 입력 1 : 3,112,311 샘플 출력 1시 13분
2 시료 입력 : 3,252,425 출력 샘플 2 : 282
PS : 표현
ANS = 1 ; 위한 ( int로 I = 1 ; i가 ++; 나는 <= N ) ANS * = (HX [I] + 1 );
수학 문제? ? ? ?
2 시간 공식 HHHH의 클래스에서 교사를 밀어
요컨대 최대 개수 (즉, H 임) 동일한 카테고리에 동일
그리고 문제의 의미하지 라인에 하나를 제외한 카테고리 1 있어야합니다 (때문에 자신의 한 최대의를 뺀 1)
예 :
이 두 개의 큰 사탕, 사탕 그리고 작은은 1,2,3 경우
그래서 모든 점은 질문의 오가지는을 충족하도록 구성하는 9 개 개의 범주의 총 연결되어있는 경우
더 나은 카운트 불이행을 빼서 계산에 모든 경우에
그림 (표시 빨간색 문제의 의미와 일치한다) :
즉, (의사)의 동작 : 합계 ([1,3]) - 합 ([2,3]).
이어서 다른 상황의 각각의 최대 값이 합산 될 수 %의 개조
중요!
대답은 매우 클 수 있도록 피곤을 취할 수있는 요청의 대상이 있기 때문에 (제목은 10억7% 필요 선생님이 말했다 우리는 높은 정밀도를 쓸 것 질문 사람들 중입니다 )
일반적으로 한쪽 (ANS %의 개조 + 모드) %의 모드에서 덧셈과 뺄셈 곱셈 과정에서 말하는 것은 문제가되지 않는다
그러나 운영의 변화뿐만 아니라 부문에서 변화는 오답으로 이어질 때문에 글을 쓰는 과정에서 문제에 특별한주의를 지불 할 경우
암호:
1 #INCLUDE <. 비트 / stdc ++ H> 2 #DEFINE 개조 1,000,000,007 3 #DEFINE freopen을 (X) {freopen을 (#x를 ".IN", "R", 표준 입력) freopen을 (#x를 "이 .out", "w를 "표준 출력)} 4 이용한 스페이스 성병; 5 INT N; 6 긴 긴 Maxl, Maxr, ANS; 7 긴 길이 (L) [ 1005 ], R [ 1005 ]; // 不开LONGLONG见ZS 8 긴 긴 해결 ( 긴 길이 A1, 긴 길이 (A2)) { 9 긴 긴 RET =1 ; // 승산 피로 때문에, 1로 초기화된다 (10) 에 대한 ( int로 I = 1 , I는 <= N-; I는 ++) { // N 대형 사탕 . 11 긴 긴 RR = 분 (R & LT [I], A1) ; // 최대 값을 찾고, H, 즉 (12)는 긴 롱 SUM = (RR-L의 [I] + 1이다. ) % * MOD (L [I] + RR) / 2 % MOD; // 추가 부 및 % 이외에 참고 13 // 여기 합 = X [1] + X [2] + ..., X [n]을 ( 제 2 항목으로 나누어 부품 번호에 의한 마지막 항목 플러스) 14 SUM = (((RR-L [I] + . 1 ) MOD % * (A2 + 1이다. ) % MOD-SUM) + MOD % MOD) % MOD; 15 // 여기 합 = 선택된 정도 곱셈 사탕 달콤한 16 RET = (RET *의 합) %의 모드; 17 } 18 리턴 RET; 19 } 20 INT 의 main () { 21 freopen을 (a); 22 는 scanf ( " %의 D ' , N); (23) 에 대한이 ( int로 I = 1 난 ++; i가 N = < {) (24) 는 scanf ( " % d 개 %의 D ' , L [i]는, R을 [I]); 25 Maxl = 최대 (Maxl, L [I]) Maxr = 최대 (Maxr, R [I]); // 找出R, L中的最大值 26 } 27 대 ( INTmaxL = I, I는 <= MAXR; I ++ ) { 28 긴 롱 TMP = ((해결 (I, I) -solve (I- . 1 , I)) + % MOD MOD)의 MOD %; // 다른 상황 동작 29 // 해결 (I는 I) 실시 예에서의 합계에 대응한다 ([1,3]) 해결 ( I-1, I) 실시 예에서의 합계에 상당 ([2,3]) 30 ANS의 = (ANS TMP +) % MOD; 31이다 } 32 의 printf ( " %의 LLD " , ANS) (33)는 복귀 0 ; 34이다 }
요약 : 코드를 보면 실제로 매우 간단합니다
그러나 8 생각할 수 없다 자신에 대한 강조와 같은 강력한 수학 문제에 대한 어쨌든, 나는 기대하지 않았다
사실, 상황이 클래스 HHHH의에서 교사의 분석 위에있는 비 난 더 멜론이 없습니다