주제 :
데부는 N 상자가, i 번째 상자가아이의 ramiflorous.
하나와 꽃 상자에 같은 색상, 다른 상자에서 서로 다른 색의 꽃.
데부 프로그램의 얼마나 많은 종류의 총을 추구 꽃 꽃다발 M 지점을 선택이 상자에서.
각 색상의 두 가지의 꽃 꽃다발의 수가 동일 할 경우, 나는이 꽃 같은 프로그램 생각합니다.
결과는 필요 10 . 9 + 7 만 모듈의 출력 후에.
입력 형식
첫 번째 라인은 두 정수 N과 M. 포함
두 번째 행은 N 나타내는 공간 구분 정수 포함 . 1 , 2 , ... , N을 .
출력 형식
출력 프로그램의 수를 나타내는 정수 10 . 9 + 7 모듈로 109 + 7의 결과.
데이터 범위
1 ≤ N ≤ (20) 1≤N≤20,
0 ≤ M ≤ 10 14 0≤M≤1014,
0 ≤ 난 ≤ 10 12 0≤Ai≤1012을
샘플 입력 :
3 5
1 3 2
샘플 출력 :
3
보고서 문제 해결 :
조금 나중에 갱스터 블로그를 포함 배제의 과정을 참조하는 방법을 찾기 시작하지 않았다,이 질문의 목적은 진정한 의미를 이해하는 것이 었습니다!
첫 번째 시나리오는 모든 Fi를 제한하지 않는 경우.
그래서 응답 따르면 C (S, N + S- 인 1) 의 다수의 세트의 조합 무한한
상황에서 우리가 불법적로부터 응답을 감산 할 필요가있다.
합법적되지 케이스 XI> fixi> 과학의입니다.
AiAi의 XI> fixi> 과학 솔루션을 집합입니다.
| 아이 | = C (S- ( 인터넷 + 1), N + S-1- (FI + 1))
우리는 이전에 그것을 인터넷 1fi + + 1 개 요소 넣어에 대응한다.
마찬가지로 | Ai⋂Aj | = C (S- ( 인터넷 + 1) - (FJ + 1), N + S-1- (FI + 1) - (FJ + 1))
를 포함 및 제외하고 응답하도록되어있어서
C (S, S + N-1 ) -Σ1≤i≤n | 아이 | + Σ1≤i <j≤n | Ai⋂Aj | ... ( 생략)
우리는 국가에 의해 각 주를 대표하는 압축 할 수 있습니다.
각 상태에 앞서 전처리 여러 요소를 넣을 필요가있다.
마지막으로 스캔 통계가 대답합니다.
O의 시간 복잡도 (2nn)
AC 코드 :
1 #INCLUDE <. 비트 / stdc ++ H> 2 사용 스페이스 성병; 3 타입 정의 긴 긴 LL; 4 5 CONST의 INT의 개조 1E9 + = 7 ; 6 INT의 N 림; 7 LL의, ANS; (8) LL의 F [ 30 ], INV [ 30 ], 합계 [ 1100000 ]; 9 의 INT 는 num [ 1100000 ]; 10 LL 빗 (LL의 N, LL의 m) (11) { // 求解C (N, M) (12) 의 경우 (m이 < 0 ) 13 반환 0 ; 14 LL의 RET = 1 ; (15) 에 대한이 (LL 난 m + = 1 ; i가 <= N; I ++ ) 16 RET RET = * (I의 %의 개조) 개조 %; // N! / m! (17) 에 대한이 ( int로 I = 1 ; I <= 나노 미터; I ++ ) 18 RET RET = *의 INV [I] 개조 %; // (㎚)! 19 리턴 RET; 20 } 21 22 INT ) (주 23 { 24 CIN >> N >> S; // n은个盒子,挑选의朵花 (25) 에 대한 ( INTI = 0 ; I는 N <; I는 ++ ) (26)는 CIN >> F [I]; // 박스의 N 입력 꽃 번호 27 [INV의 . 1 ] = 1. , 28 대 ( INT I = 2 , I는 = N + < 1. ; I ++ ) 29 INV [I] = (INV는 [I은 MOD는 %] * (MOD-MOD / I)) MOD %의가; // 마법 플레이 테이블 해결 역원 30 임 = ( 1. << N-) - 1이다. ] / / 이진 열거 쉽게 발수 용량 (31)은 위해 ( int로 난 = 0 ; I는 <= I 임은 ++ ) 32 { 33 인 위한( 지능 J = 0 ; J <N-, J ++ ) (34)가 { 35 IF (I & ( (1). << J)) 36 { 37 SUM [I]는 = F + [J] + 1이다. ] // 미리 넣어 인터넷 + 1 번째 소자 (38)가 NUM [I]는 ++; // 발생 수의 태그 39 } 40 } 41 } // 가지며, 1,2-에서, 모든 상태를 처리하고 -> N- 42 인 위해 ( int로 = I를 0 ; I은 <= 임; I ++ ) (43)는 { 44 인 경우(NUM [I] % 2 ) 45 의 ANS = (ANS 빗 (S + N- 1 -sum은 [I], S-합 [I]) + 모드) % 개조; 46 다른 47 의 ANS = (ANS + 빗 (S + N- 1 -sum [I], S-합 [I])) % 개조; 48 } 49 COUT << ANS << ENDL; 50 }