Skip to content

Commit 830caef

Browse files
authored
Update 0044.开发商购买土地.md
1 parent 5de44c3 commit 830caef

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

problems/kamacoder/0044.开发商购买土地.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,3 +388,85 @@ if __name__ == "__main__":
388388
main()
389389

390390
```
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+
```

0 commit comments

Comments
 (0)