답안 #7161

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
7161 2014-07-27T11:58:28 Z tncks0121 경비원 (GA8_guard) C++
0 / 100
200 ms 1624 KB
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <math.h>
#include <assert.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <string>
#include <functional>
#include <vector>
#include <deque>
#include <utility>
#include <bitset>
#include <limits.h> 
 
using namespace std;
typedef long long ll;
typedef unsigned long long llu;
typedef double lf;
typedef unsigned int uint;
typedef long double llf;
typedef pair<int, int> pii;
 
const int N_ = 2225, SZ = 2222;
const int PN = 15;
const int P[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
const int MOD = (int)1e9 + 7;
 
int N, freq[SZ+10];
ll Table[1 << PN], Table_prev[1 << PN];
int A[SZ+10], D[SZ+10];
ll res = 0;
ll ones = 0;
 
int main() {
    scanf("%d", &N);
    for(int i = 1; i <= N; i++) {
        int x; scanf("%d", &x);
        ++freq[x];
    }
 
    for(int n = 1; n <= SZ; n++) D[n] = n;
    for(int i = 0; i < PN; i++) {
        for(int n = P[i]; n <= SZ; n += P[i]) {
            A[n] |= 1<<i;
            while(D[n] % P[i] == 0) D[n] /= P[i];
        }
    }
 
    Table[0] = 1;
    //for(int i = 0; i < freq[1]; i++) Table[0] = (Table[0] * 2) % MOD;
    for(int n = 2; n <= SZ; n++) if(freq[n] != 0 && D[n] == 1) {
        for(int state = 0; state < (1<<PN); state++) if((state & A[n]) == 0) {
            ll &v = Table[state | A[n]];
            v += Table[state] * freq[n]; v %= MOD;
        }
    }
 
    for(int d = P[PN-1]+1; d <= SZ; d++) if(A[d] == 0) {
        for(int state = 0; state < (1<<PN); state++) Table_prev[state] = Table[state];
        for(int n = d, k = 1; n <= SZ; n += d, k++) if(freq[n] != 0) {
            for(int state = 0; state < (1<<PN); state++) if((state & A[k]) == 0) {
                ll &v = Table[state | A[k]];
                v += Table_prev[state] * freq[n]; v %= MOD;
            }
        }
    }
 
    res = 0;
    for(int state = 0; state < (1<<PN); state++) res = (res + Table[state]) % MOD;
    res -= (N + 1);
    res = (res + MOD) % MOD;
 
    printf("%lld\n", res);
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 1624 KB Output is correct
2 Correct 12 ms 1624 KB Output is correct
3 Correct 12 ms 1624 KB Output is correct
4 Correct 8 ms 1624 KB Output is correct
5 Correct 8 ms 1624 KB Output is correct
6 Correct 12 ms 1624 KB Output is correct
7 Correct 12 ms 1624 KB Output is correct
8 Correct 12 ms 1624 KB Output is correct
9 Correct 12 ms 1624 KB Output is correct
10 Correct 12 ms 1624 KB Output is correct
11 Correct 12 ms 1624 KB Output is correct
12 Correct 12 ms 1624 KB Output is correct
13 Correct 12 ms 1624 KB Output is correct
14 Correct 12 ms 1624 KB Output is correct
15 Incorrect 8 ms 1624 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 1624 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 1624 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 200 ms 1624 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 132 ms 1624 KB Output isn't correct
2 Halted 0 ms 0 KB -