提出 #61388482


ソースコード 拡げる

#include <bits/stdc++.h>
#define int long long
using namespace std;

int l, r, mi[20], f[20][11][2][2];

int dfs(int x, int lim, int mx, bool f1, bool f2){
	if(x < 0) return 1;
	if(f[x][lim][f1][f2] != -1) return f[x][lim][f1][f2];
	if(!f2 && mi[x] > mx) return dfs(x - 1, 10, mx, f1, f2);
	int digit = mx / mi[x] % 10;
	f[x][lim][f1][f2] = 0;
	for(int i = 0; i < (f1 ? min(lim, digit + 1) : lim); ++i){
		if(!i && !f2) f[x][lim][f1][f2] += dfs(x - 1, 10, mx, f1 & (i == digit), false);
		else if(!f2 && i) f[x][lim][f1][f2] += dfs(x - 1, i, mx, f1 & (i == digit), f2 || i != 0);
		else f[x][lim][f1][f2] += dfs(x - 1, lim, mx, f1 & (i == digit), f2 || i != 0);
	}
	return f[x][lim][f1][f2];
}

signed main()
{
	mi[0] = 1;
	for(int i = 1; i < 19; ++i) mi[i] = mi[i - 1] * 10;
	cin >> l >> r;
	for(int i = 0; i < 20; ++i)
		for(int j = 0; j < 11; ++j) f[i][j][0][0] = f[i][j][0][1] = f[i][j][1][0] = f[i][j][1][1] = -1;
	int ansr = dfs(18, 10, r, true, false);
	for(int i = 0; i < 20; ++i)
		for(int j = 0; j < 11; ++j) f[i][j][0][0] = f[i][j][0][1] = f[i][j][1][0] = f[i][j][1][1] = -1;
	int ansl = dfs(18, 10, l - 1, true, false);
	cout << ansr - ansl << '\n';
	return 0;
}

提出情報

提出日時
問題 C - Snake Numbers
ユーザ Hthntd
言語 C++ 20 (gcc 12.2)
得点 350
コード長 1207 Byte
結果 AC
実行時間 1 ms
メモリ 3584 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 350 / 350
結果
AC × 3
AC × 29
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 02_random2_00.txt, 02_random2_01.txt, 02_random2_02.txt, 02_random2_03.txt, 03_random3_00.txt, 03_random3_01.txt, 03_random3_02.txt, 03_random3_03.txt, 03_random3_04.txt, 04_handmade_00.txt, 04_handmade_01.txt, 04_handmade_02.txt, 04_handmade_03.txt, 04_handmade_04.txt, 04_handmade_05.txt, 04_handmade_06.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3468 KiB
00_sample_01.txt AC 1 ms 3456 KiB
00_sample_02.txt AC 1 ms 3584 KiB
01_random_00.txt AC 1 ms 3460 KiB
01_random_01.txt AC 1 ms 3500 KiB
01_random_02.txt AC 1 ms 3452 KiB
01_random_03.txt AC 1 ms 3512 KiB
01_random_04.txt AC 1 ms 3456 KiB
01_random_05.txt AC 1 ms 3464 KiB
01_random_06.txt AC 1 ms 3504 KiB
01_random_07.txt AC 1 ms 3376 KiB
01_random_08.txt AC 1 ms 3376 KiB
01_random_09.txt AC 1 ms 3460 KiB
02_random2_00.txt AC 1 ms 3472 KiB
02_random2_01.txt AC 1 ms 3444 KiB
02_random2_02.txt AC 1 ms 3464 KiB
02_random2_03.txt AC 1 ms 3504 KiB
03_random3_00.txt AC 1 ms 3464 KiB
03_random3_01.txt AC 1 ms 3468 KiB
03_random3_02.txt AC 1 ms 3444 KiB
03_random3_03.txt AC 1 ms 3440 KiB
03_random3_04.txt AC 1 ms 3472 KiB
04_handmade_00.txt AC 1 ms 3464 KiB
04_handmade_01.txt AC 1 ms 3464 KiB
04_handmade_02.txt AC 1 ms 3496 KiB
04_handmade_03.txt AC 1 ms 3428 KiB
04_handmade_04.txt AC 1 ms 3444 KiB
04_handmade_05.txt AC 1 ms 3500 KiB
04_handmade_06.txt AC 1 ms 3460 KiB