답안 #12719

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
12719 2015-01-02T05:30:50 Z ainu7 The last wizard (kriii2_T) C++
1 / 4
624 ms 1676 KB
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <string>
#include <queue>
#include <map>
#include <algorithm>
#include <cmath>
#include <iostream>
#include <sstream>
#include <set>
using namespace std;

const int mmod = 1000000007;

int pw(int a, long long b) {
  if (b == 0) return 1;
  int c = pw(a, b/2);
  c = (1LL * c * c) % mmod;
  if (b%2) c = (1LL * c * a) % mmod;
  return c;
}

int inv_mod(int a, int b) {
  if (a == 1) return b;
  int div = mmod / a + 1;
  return inv_mod((a * (long long)div) % mmod, (b * (long long)div) % mmod);
}

int combi(long long a, int b) {
  for (int i=0; i<b; i++)
    if ((a-i)%mmod == 0) return 0;
  int ret = 1;
  for (int i=0; i<b; i++) {
    ret = (1LL * ret * (a-i)) % mmod;
    ret = (1LL * ret * inv_mod(i+1, 1)) % mmod;
  }
  return ret;
}

int main()
{
  long long T;
  int N, A;
  cin >> T >> N >> A;
  int remain = A;
  int sum[1024] = {0};
  for (int i=0; i<N; i++) {
    int P;
    cin >> P;
    int Q[10];
    remain -= P;
    for (int j=0; j<10; j++)
      cin >> Q[j];
    for (int j=0; j<(1<<10); j++) {
      int now = P;
      for (int k=0; k<10; k++)
        if (j&(1<<k)) now = (1LL * now * Q[k]) % mmod;
      sum[j] = (sum[j] + now) % mmod;
    }
  }
  if (remain) {
    sum[0] = (sum[0] + remain) % mmod;
  }

  int res = pw(A, T);
  int prv[1<<10] = {0};
  prv[0] = 1;
  for (int i=1; i<=min(10LL, T); i++) {
    int nxt[1<<10] = {0};
    int com = combi(T, i);
    for (int j=0; j<(1<<10); j++) {
      nxt[j] = 0;
      for (int k=0; k<j; k++)
        if ((j&k) == k)
         nxt[j] = (nxt[j] + 1LL * prv[k] * sum[j-k]) % mmod;
    }
    for (int j=0; j<(1<<10); j++) {
      prv[j] = nxt[j];
      res = (res + ((1LL * prv[j] * com) % mmod) * pw(A, T-i)) % mmod;
    }
  }
  cout << res << endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 1676 KB Output is correct
2 Correct 0 ms 1676 KB Output is correct
3 Correct 0 ms 1676 KB Output is correct
4 Correct 4 ms 1676 KB Output is correct
5 Correct 4 ms 1676 KB Output is correct
6 Correct 4 ms 1676 KB Output is correct
7 Correct 4 ms 1676 KB Output is correct
8 Correct 8 ms 1676 KB Output is correct
9 Correct 8 ms 1676 KB Output is correct
10 Correct 8 ms 1676 KB Output is correct
11 Correct 8 ms 1676 KB Output is correct
12 Correct 8 ms 1676 KB Output is correct
13 Correct 4 ms 1676 KB Output is correct
14 Correct 8 ms 1676 KB Output is correct
15 Correct 8 ms 1676 KB Output is correct
16 Correct 8 ms 1676 KB Output is correct
17 Correct 8 ms 1676 KB Output is correct
18 Correct 4 ms 1676 KB Output is correct
19 Correct 8 ms 1676 KB Output is correct
20 Correct 0 ms 1676 KB Output is correct
21 Correct 0 ms 1676 KB Output is correct
22 Correct 0 ms 1676 KB Output is correct
23 Correct 4 ms 1676 KB Output is correct
24 Correct 4 ms 1676 KB Output is correct
25 Correct 4 ms 1676 KB Output is correct
26 Correct 4 ms 1676 KB Output is correct
27 Correct 8 ms 1676 KB Output is correct
28 Correct 8 ms 1676 KB Output is correct
29 Correct 8 ms 1676 KB Output is correct
30 Correct 8 ms 1676 KB Output is correct
31 Correct 8 ms 1676 KB Output is correct
32 Correct 0 ms 1676 KB Output is correct
33 Correct 0 ms 1676 KB Output is correct
34 Correct 0 ms 1676 KB Output is correct
35 Correct 4 ms 1676 KB Output is correct
36 Correct 4 ms 1676 KB Output is correct
37 Correct 4 ms 1676 KB Output is correct
38 Correct 4 ms 1676 KB Output is correct
39 Correct 8 ms 1676 KB Output is correct
40 Correct 8 ms 1676 KB Output is correct
41 Correct 0 ms 1676 KB Output is correct
42 Correct 0 ms 1676 KB Output is correct
43 Correct 0 ms 1676 KB Output is correct
44 Correct 4 ms 1676 KB Output is correct
45 Correct 4 ms 1676 KB Output is correct
46 Correct 4 ms 1676 KB Output is correct
47 Correct 4 ms 1676 KB Output is correct
48 Correct 8 ms 1676 KB Output is correct
49 Correct 0 ms 1676 KB Output is correct
50 Correct 0 ms 1676 KB Output is correct
51 Correct 0 ms 1676 KB Output is correct
52 Correct 0 ms 1676 KB Output is correct
53 Correct 4 ms 1676 KB Output is correct
54 Correct 4 ms 1676 KB Output is correct
55 Correct 4 ms 1676 KB Output is correct
56 Correct 0 ms 1676 KB Output is correct
57 Correct 0 ms 1676 KB Output is correct
58 Correct 0 ms 1676 KB Output is correct
59 Correct 4 ms 1676 KB Output is correct
60 Correct 4 ms 1676 KB Output is correct
61 Correct 4 ms 1676 KB Output is correct
62 Correct 4 ms 1676 KB Output is correct
63 Correct 0 ms 1676 KB Output is correct
64 Correct 0 ms 1676 KB Output is correct
65 Correct 4 ms 1676 KB Output is correct
66 Correct 4 ms 1676 KB Output is correct
67 Correct 4 ms 1676 KB Output is correct
68 Correct 4 ms 1676 KB Output is correct
69 Correct 0 ms 1676 KB Output is correct
70 Correct 0 ms 1676 KB Output is correct
71 Correct 4 ms 1676 KB Output is correct
72 Correct 4 ms 1676 KB Output is correct
73 Correct 4 ms 1676 KB Output is correct
74 Correct 4 ms 1676 KB Output is correct
75 Correct 0 ms 1676 KB Output is correct
76 Correct 0 ms 1676 KB Output is correct
77 Correct 4 ms 1676 KB Output is correct
78 Correct 4 ms 1676 KB Output is correct
79 Correct 4 ms 1676 KB Output is correct
80 Correct 4 ms 1676 KB Output is correct
81 Correct 0 ms 1676 KB Output is correct
82 Correct 0 ms 1676 KB Output is correct
83 Correct 4 ms 1676 KB Output is correct
84 Correct 4 ms 1676 KB Output is correct
85 Correct 4 ms 1676 KB Output is correct
86 Correct 0 ms 1676 KB Output is correct
87 Correct 0 ms 1676 KB Output is correct
88 Correct 4 ms 1676 KB Output is correct
89 Correct 4 ms 1676 KB Output is correct
90 Correct 4 ms 1676 KB Output is correct
91 Correct 0 ms 1676 KB Output is correct
92 Correct 0 ms 1676 KB Output is correct
93 Correct 4 ms 1676 KB Output is correct
94 Correct 4 ms 1676 KB Output is correct
95 Correct 4 ms 1676 KB Output is correct
96 Correct 0 ms 1676 KB Output is correct
97 Correct 0 ms 1676 KB Output is correct
98 Correct 4 ms 1676 KB Output is correct
99 Correct 4 ms 1676 KB Output is correct
100 Correct 4 ms 1676 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 624 ms 1676 KB Output isn't correct
2 Halted 0 ms 0 KB -