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
2017-09-12 10:17:42+0900
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
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