Submission #1588722


Source Code Expand

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
 
#define BIG 2000000007
 
#define MOD 1000000007
typedef unsigned long long ull;
typedef   signed long long sll;
 
typedef struct {
	int a;
	int b;
} hw;
 
#define N_MAX 100000
#define M_MAX 100000
 
ull n, m, k;
ull h, w;
ull va, vb, vc, vd;
// ull a[N_MAX];
// sll a[N_MAX];
// ull b[N_MAX];
// ull dp[N_MAX][M_MAX + 1];
// char s[N_MAX + 1];
// char t[N_MAX + 1];
// hw arr[N_MAX];
ull digitdp[ 20][   2][      2];
//          pos  less  has4or9
 
void swap_adj(ull *a, ull *b){
	ull tmp = *b;
	*b = *a;
	*a = tmp;
	return;
}

ull divide(ull a, ull b){
	ull x = MOD - 2;
	ull ans = 1;
	while (x) {
		if (x & 1) ans = (ans * b) % MOD;
		b = (b * b) % MOD;
		x /= 2;
	}
	return (a * ans) % MOD;
}
 
int digits(ull x){
	int i = 1;
	while (x >= 10) {
		x /= 10;
		i++;
	}
	return i;
}
 
int min(ull x, ull y){
	return (x < y) ? x : y;
}
 
ull gcd(ull x, ull y){
	if (x < y) {
		return gcd(y, x);
	} else if (y == 0) {
		return x;
	} else {
		return gcd(y, x % y);
	}
}
 
ull bitpow(ull a, ull x){
	ull result = 1;
	while (x) {
		if (x & 1) {
			result *= a;
			result %= MOD;
		}
		x /= 2;
		a = (a * a) % MOD;
	}
	return result;
}

int comp(const void *left, const void *right){
	if ((*(int*)left) < (*(int*)right)) {
		return -1;
	} else if ((*(int*)left) > (*(int*)right)) {
		return +1;
	} else {
		return 0;
	}
}

// int nextroute(int arr[]){
// 	int i = n - 1;
// 	int j, x;
// 	while (arr[i - 1] > arr[i]) i--;

// 	x = n;
// 	for (j = i; j < n; j++) {
// 		if (arr[j] < arr[i - 1]) continue;
// 		if (x == n || arr[x] > arr[j]) x = j;
// 	}
// 	arr[i - 1] ^= arr[x];
// 	arr[x] ^= arr[i - 1];
// 	arr[i - 1] ^= arr[x];

// 	qsort(&arr[i], n - i, sizeof(int), comp);
// 	return 0;
// }

int nibutan_target(ull target){
	ull maxdist = (target * (target + 1) / 2); // 時刻targetまでに到着できる距離は[-maxdist, maxdist]
	return (n <= maxdist);
}

int targetdig(ull x, int index /* 1-indexed */){
	// static...?
	int posmax = digits(x);
	if (posmax < index) return -1;
	while (posmax > index) {
		posmax--;
		x /= 10;
	}
	return x % 10;
}

ull solve(ull x){
	int i, j;
	int pos, less, has4or9;
	const int posmax = digits(x);
	ull answer = 0;

	for (pos = 0; pos <= posmax; pos++) {
		for (less = 0; less < 2; less++) {
			for (has4or9 = 0; has4or9 < 2; has4or9++) {
				digitdp[pos][less][has4or9] = 0;
			}
		}
	}
	digitdp[0][0][0] = 1;

	for (pos = 0; pos < posmax; pos++) {
		for (less = 0; less < 2; less++) {
			for (has4or9 = 0; has4or9 < 2; has4or9++) {
				int d;
				int lim = (less ? 9 : targetdig(x, pos + 1));

				// printf("d=%d, [%d][%d][%d] = %3llu\n", targetdig(x, pos + 1), pos, less, has4or9, digitdp[pos][less][has4or9]);
				for (d = 0; d <= lim; d++) {
					digitdp[pos + 1][(less || (d < lim)) ? 1 : 0][(has4or9 || d == 4 || d == 9) ? 1 : 0] += digitdp[pos][less][has4or9];
					// printf("  [%d][%d][%d] += %llu\n", pos + 1, (less || d < lim), (has4or9 || d == 4 || d == 9), digitdp[pos][less][has4or9]);
				}
			}
		}
	}

	for (less = 0; less < 2; less++) {
		// printf("! [%d][%d][1] %llu\n", posmax, less);
		answer += digitdp[posmax][less][1];
	}

	// printf("    ans: %llu\n", answer);

	return answer;
}
 
int main(void){
	int i, j;
	int x;

	scanf("%llu%llu", &m, &n);

	printf("%llu\n", solve(n) - solve(m - 1));


	return 0;
}

Submission Info

Submission Time
Task D - 禁止された数字
User sheyasutaka
Language C (GCC 5.4.1)
Score 100
Code Size 3536 Byte
Status AC
Exec Time 1 ms
Memory 128 KB

Compile Error

./Main.c: In function ‘main’:
./Main.c:175:2: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%llu%llu", &m, &n);
  ^

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 4
AC × 16
AC × 39
Set Name Test Cases
Sample subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt, subtask0_sample04.txt
Subtask1 subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt
Subtask2 subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt, subtask0_sample04.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt, subtask2_16.txt, subtask2_17.txt, subtask2_18.txt, subtask2_19.txt, subtask2_20.txt, subtask2_21.txt, subtask2_22.txt
Case Name Status Exec Time Memory
subtask0_sample01.txt AC 1 ms 128 KB
subtask0_sample02.txt AC 1 ms 128 KB
subtask0_sample03.txt AC 0 ms 128 KB
subtask0_sample04.txt AC 1 ms 128 KB
subtask1_01.txt AC 1 ms 128 KB
subtask1_02.txt AC 1 ms 128 KB
subtask1_03.txt AC 1 ms 128 KB
subtask1_04.txt AC 1 ms 128 KB
subtask1_05.txt AC 1 ms 128 KB
subtask1_06.txt AC 1 ms 128 KB
subtask1_07.txt AC 1 ms 128 KB
subtask1_08.txt AC 1 ms 128 KB
subtask1_09.txt AC 1 ms 128 KB
subtask1_10.txt AC 1 ms 128 KB
subtask1_11.txt AC 1 ms 128 KB
subtask1_12.txt AC 1 ms 128 KB
subtask1_13.txt AC 1 ms 128 KB
subtask2_01.txt AC 1 ms 128 KB
subtask2_02.txt AC 1 ms 128 KB
subtask2_03.txt AC 1 ms 128 KB
subtask2_04.txt AC 1 ms 128 KB
subtask2_05.txt AC 1 ms 128 KB
subtask2_06.txt AC 1 ms 128 KB
subtask2_07.txt AC 1 ms 128 KB
subtask2_08.txt AC 1 ms 128 KB
subtask2_09.txt AC 1 ms 128 KB
subtask2_10.txt AC 1 ms 128 KB
subtask2_11.txt AC 1 ms 128 KB
subtask2_12.txt AC 1 ms 128 KB
subtask2_13.txt AC 1 ms 128 KB
subtask2_14.txt AC 1 ms 128 KB
subtask2_15.txt AC 1 ms 128 KB
subtask2_16.txt AC 1 ms 128 KB
subtask2_17.txt AC 1 ms 128 KB
subtask2_18.txt AC 1 ms 128 KB
subtask2_19.txt AC 1 ms 128 KB
subtask2_20.txt AC 1 ms 128 KB
subtask2_21.txt AC 1 ms 128 KB
subtask2_22.txt AC 1 ms 128 KB