Submission #73615370


Source Code Expand

Copy
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
int cmp(const void* x, const void* y) {
int a = *(const int*)x, b = *(const int*)y;
return (a > b) - (a < b);
}
int N, M;
int A[212345];
int meow[12][212345];
int main(void) {
int i, j;
int64_t ans = 0;
if (scanf("%d%d", &N, &M) != 2) return 1;
for (i = 0; i < N; i++) {
int cur;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>

int cmp(const void* x, const void* y) {
	int a = *(const int*)x, b = *(const int*)y;
	return (a > b) - (a < b);
}

int N, M;
int A[212345];

int meow[12][212345];

int main(void) {
	int i, j;
	int64_t ans = 0;
	if (scanf("%d%d", &N, &M) != 2) return 1;
	for (i = 0; i < N; i++) {
		int cur;
		if (scanf("%d", &A[i]) != 1) return 1;
		for (cur = A[i] % M, j = 0; j < 12; j++) {
			meow[j][i] = cur;
			cur = (int)((long long)cur * 10 % M);
		}
	}
	for (i = 0; i < 12; i++) {
		qsort(meow[i], N, sizeof(*meow[i]), cmp);
	}
	for (i = 0; i < N; i++) {
		char str[16];
		int len, target;
		int l, ge, le, g;
		snprintf(str, sizeof(str), "%d", A[i]);
		len = (int)strlen(str);
		target = (M - A[i] % M) % M;
		l = -1;
		ge = N;
		while (l + 1 < ge) {
			int m = l + (ge - l) / 2;
			if (meow[len][m] >= target) ge = m; else l = m;
		}
		le = -1;
		g = N;
		while (le + 1 < g) {
			int m = le + (g - le) / 2;
			if (meow[len][m] > target) g = m; else le = m;
		}
		ans += le - ge + 1;
	}
	printf("%" PRId64 "\n", ans);
	return 0;
}

/*

1. 10^n 倍してMで割った余りを求める
2. f(x, y) の y として各値を使ったとき、残り何なら M の倍数か求める
3. M で割った余りがそれになっているやつの個数を二分探索で求める

*/

Submission Info

Submission Time
Task D - 183183
User mikecat
Language C23 (GCC 14.2.0)
Score 400
Code Size 1413 Byte
Status AC
Exec Time 379 ms
Memory 12656 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 4
AC × 25
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.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, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 1828 KiB
00_sample_01.txt AC 1 ms 1812 KiB
00_sample_02.txt AC 0 ms 1820 KiB
00_sample_03.txt AC 0 ms 1820 KiB
01_random_00.txt AC 0 ms 1820 KiB
01_random_01.txt AC 0 ms 1832 KiB
01_random_02.txt AC 0 ms 1800 KiB
01_random_03.txt AC 0 ms 1820 KiB
01_random_04.txt AC 114 ms 12396 KiB
01_random_05.txt AC 74 ms 4156 KiB
01_random_06.txt AC 171 ms 9140 KiB
01_random_07.txt AC 164 ms 6752 KiB
01_random_08.txt AC 153 ms 10584 KiB
01_random_09.txt AC 337 ms 11456 KiB
01_random_10.txt AC 134 ms 12632 KiB
01_random_11.txt AC 379 ms 12644 KiB
01_random_12.txt AC 235 ms 12624 KiB
01_random_13.txt AC 34 ms 2984 KiB
01_random_14.txt AC 179 ms 8948 KiB
01_random_15.txt AC 251 ms 9932 KiB
01_random_16.txt AC 140 ms 8620 KiB
01_random_17.txt AC 30 ms 2876 KiB
01_random_18.txt AC 248 ms 12656 KiB
01_random_19.txt AC 113 ms 12388 KiB
01_random_20.txt AC 22 ms 3868 KiB


2026-02-26 (Thu)
00:18:21 +09:00