Submission #1227062


Source Code Expand

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
#define REP(i, n) for(int i = 0; i < (int)(n); ++i)

typedef long long ll;

const int MOD = 1000000007;

struct K {
  int lb;
  int ub;
};

ll mypow(ll x, ll n) {
  if (n == 0) return 1;
  if (n & 1) return mypow(x * x % MOD, n / 2) * x % MOD;
  return mypow(x * x % MOD, n / 2);
}

int table[410][410];

int n;
K vs[410];

ll memo[410][410];
ll solve(int pos, int rest) {
  ll& res = memo[pos][rest];
  if(res < 0) {
    res = 0;
    if(pos == n-1) {
      for(int x = vs[pos].lb; x <= vs[pos].ub; ++x) { 
        res = (res + mypow(x, rest)) % MOD;
      }
    } else {
      for(int i = 0; i <= rest; ++i) {
        ll solveRest = solve(pos+1, rest-i);
        ll xx = (table[i][vs[pos].ub+1] - table[i][vs[pos].lb] + MOD) % MOD;
        res = (res + xx * solveRest) % MOD;
      }
    }
    // cerr << "solve(" << pos << ", " << rest << ") = " << res << endl;
  }
  return res;
}



int main(void) {
  for(int i = 0; i <= 400; ++i) {
    for(int x = 0; x <= 400; ++x) {
      table[i][x+1] = (table[i][x] + mypow(x, i)) % MOD;
    }
  }
  
  int nCandy;
  scanf("%d%d", &n, &nCandy);
  REP(i, n) {
    scanf("%d", &vs[i].lb);
  }
  REP(i, n) {
    scanf("%d", &vs[i].ub);
  }

  memset(memo, -1, sizeof memo);
  ll res = solve(0, nCandy);
  printf("%lld\n", res);

  return 0;
}

Submission Info

Submission Time
Task E - Children and Candies
User ush
Language C++14 (GCC 5.4.1)
Score 800
Code Size 1475 Byte
Status AC
Exec Time 355 ms
Memory 2176 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:61:29: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &n, &nCandy);
                             ^
./Main.cpp:63:27: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &vs[i].lb);
                           ^
./Main.cpp:66:27: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &vs[i].ub);
                           ^

Judge Result

Set Name Sample Subtask All
Score / Max Score 0 / 0 400 / 400 400 / 400
Status
AC × 5
AC × 12
AC × 30
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 0_004.txt
Subtask 0_001, 0_003, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 0_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 2_017.txt, 2_018.txt, 2_019.txt, 2_020.txt, 2_021.txt, 2_022.txt, 2_023.txt, 2_024.txt, 2_025.txt, 2_026.txt, 2_027.txt, 2_028.txt, 2_029.txt
Case Name Status Exec Time Memory
0_000.txt AC 9 ms 2176 KB
0_001.txt AC 9 ms 2176 KB
0_002.txt AC 9 ms 2176 KB
0_003.txt AC 9 ms 2176 KB
0_004.txt AC 9 ms 2176 KB
1_005.txt AC 9 ms 2176 KB
1_006.txt AC 9 ms 2176 KB
1_007.txt AC 9 ms 2176 KB
1_008.txt AC 9 ms 2176 KB
1_009.txt AC 9 ms 2176 KB
1_010.txt AC 9 ms 2176 KB
1_011.txt AC 9 ms 2176 KB
1_012.txt AC 9 ms 2176 KB
1_013.txt AC 9 ms 2176 KB
1_014.txt AC 342 ms 2176 KB
1_015.txt AC 337 ms 2176 KB
1_016.txt AC 340 ms 2176 KB
2_017.txt AC 9 ms 2176 KB
2_018.txt AC 9 ms 2176 KB
2_019.txt AC 9 ms 2176 KB
2_020.txt AC 9 ms 2176 KB
2_021.txt AC 9 ms 2176 KB
2_022.txt AC 9 ms 2176 KB
2_023.txt AC 355 ms 2176 KB
2_024.txt AC 351 ms 2176 KB
2_025.txt AC 58 ms 2176 KB
2_026.txt AC 10 ms 2176 KB
2_027.txt AC 277 ms 2176 KB
2_028.txt AC 13 ms 2176 KB
2_029.txt AC 10 ms 2176 KB