CSES - KILO 2018 1/5 - Results
Submission details
Task:Quadratic Quest
Sender:Olli
Submission time:2018-09-06 18:15:02 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.02 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.02 sdetails
#4ACCEPTED0.03 sdetails
#5ACCEPTED0.13 sdetails
#6ACCEPTED0.12 sdetails
#7ACCEPTED0.14 sdetails
#8ACCEPTED0.12 sdetails
#9ACCEPTED0.06 sdetails
#10ACCEPTED0.06 sdetails

Code

#include <iostream>

using namespace std;

const int N = 1e3 + 5;
const int M = 1e9 + 7;

int dp[N][N];

int main() {
	int n, m;
	cin >> n >> m;

	for(int i = 1; i <= m; ++i) {
		dp[1][i] = 1;
	}

	for(int i = 2; i <= n; ++i) {
		for(int j = 1; j <= m; ++j) {
			//Calculate dp[i][j];

			int k = 1;
			while(j + k*k <= m) {
				dp[i][j] += dp[i-1][j + k*k];
				if(dp[i][j] >= M) dp[i][j] -= M;
				++k;
			}
			k = 0;
			while(j - k*k >= 1) {
				dp[i][j] += dp[i-1][j - k*k];
				if(dp[i][j] >= M) dp[i][j] -= M;
				++k;
			}
		}
	}

	int s = 0;
	for(int j = 1; j <= m; ++j) {
		s += dp[n][j];
		if(s >= M) s -= M;
	}
	cout << s << "\n";



}

Test details

Test 1

Verdict: ACCEPTED

input
3 5

correct output
45

user output
45

Test 2

Verdict: ACCEPTED

input
1 1

correct output
1

user output
1

Test 3

Verdict: ACCEPTED

input
1 1000

correct output
1000

user output
1000

Test 4

Verdict: ACCEPTED

input
1000 1

correct output
1

user output
1

Test 5

Verdict: ACCEPTED

input
1000 1000

correct output
387641086

user output
387641086

Test 6

Verdict: ACCEPTED

input
1000 961

correct output
661272544

user output
661272544

Test 7

Verdict: ACCEPTED

input
999 1000

correct output
735583829

user output
735583829

Test 8

Verdict: ACCEPTED

input
999 961

correct output
358783681

user output
358783681

Test 9

Verdict: ACCEPTED

input
687 694

correct output
317548057

user output
317548057

Test 10

Verdict: ACCEPTED

input
930 573

correct output
775707207

user output
775707207