Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /