File tree Expand file tree Collapse file tree 1 file changed +82
-0
lines changed Expand file tree Collapse file tree 1 file changed +82
-0
lines changed Original file line number Diff line number Diff line change @@ -388,3 +388,85 @@ if __name__ == "__main__":
388
388
main()
389
389
390
390
```
391
+ ### C
392
+
393
+ 前缀和
394
+ ``` c
395
+ #include < stdlib.h>
396
+ #include < stdio.h>
397
+
398
+ int main ()
399
+ {
400
+ int n = 0, m = 0, ret_ver = 0, ret_hor = 0;
401
+
402
+ // 读取行和列的值
403
+ scanf ("%d%d", &n, &m);
404
+ // 动态分配数组a(横)和b(纵)的空间
405
+ int * a = (int * )malloc(sizeof(int) * n);
406
+ int * b = (int * )malloc(sizeof(int) * m);
407
+
408
+ // 初始化数组a和b
409
+ for (int i = 0; i < n; i++)
410
+ {
411
+ a[i] = 0;
412
+ }
413
+ for (int i = 0; i < m; i++)
414
+ {
415
+ b[i] = 0;
416
+ }
417
+
418
+ // 读取区块权值并计算每行和每列的总权值
419
+ for (int i = 0; i < n; i++)
420
+ {
421
+ for (int j = 0; j < m; j++)
422
+ {
423
+ int tmp;
424
+ scanf ("%d", &tmp);
425
+ a[ i] += tmp;
426
+ b[ j] += tmp;
427
+ }
428
+ }
429
+
430
+ // 计算每列以及每行的前缀和
431
+ for (int i = 1; i < n; i++)
432
+ {
433
+ a[i] += a[i - 1];
434
+ }
435
+ for (int i = 1; i < m; i++)
436
+ {
437
+ b[i] += b[i - 1];
438
+ }
439
+
440
+ // 初始化ret_ver和ret_hor为最大可能值
441
+ ret_hor = a[n - 1];
442
+ ret_ver = b[m - 1];
443
+
444
+ // 计算按行划分的最小差异
445
+ int ret2 = 0;
446
+ while (ret2 < n)
447
+ {
448
+ ret_hor = (ret_hor > abs(a[n - 1] - 2 * a[ret2])) ? abs(a[n - 1] - 2 * a[ret2]) : ret_hor;
449
+ // 原理同列,但更高级
450
+ ret2++;
451
+ }
452
+ // 计算按列划分的最小差异
453
+ int ret1 = 0;
454
+ while (ret1 < m)
455
+ {
456
+ if (ret_ver > abs(b[m - 1] - 2 * b[ret1]))
457
+ {
458
+ ret_ver = abs(b[m - 1] - 2 * b[ret1]);
459
+ }
460
+ ret1++;
461
+ }
462
+
463
+ // 输出最小差异
464
+ printf ("%d\n", (ret_ver <= ret_hor) ? ret_ver : ret_hor);
465
+
466
+ // 释放分配的内存
467
+ free (a);
468
+ free(b);
469
+ return 0;
470
+ }
471
+
472
+ ```
You can’t perform that action at this time.
0 commit comments