酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

明朝,朱权在位期间,朝廷内有两位权臣——张居正和冯保。张居正掌管国库,而冯保掌管兵权 某日,天子发现朝中有n名重臣的权力过于接近,这可能会导致政局不稳。他决定重新分配这n名大臣的权力。 张居正提供了一套记录这些大臣权力的册子(num),冯保则提供了一套调整这些权力所需要的代价册子(cost)。为了使得代价最小,张居正提议在调整权力前,允许冯保重新排序代价册子(cost)中的代价值。 每当增加某大臣的权力值(num[i])时,都需要消耗(cost[i])的代价。一旦开始调整,代价册子(cost)就不能再进行改动。 在这种情况下,如何使得这n名大臣的权力互不相同,并且总代价最小?结果需要对2^64取模。 输入描述 第一个一个正整数n 第二行n个正整数num[i] 第三行n个正整数cost[i] n -> [1,10^6] num,cost -> [1,10^9] 尽量不要使用cin输入,以免输入时间开销过大 输出描述 最小代价值,记得对2^64次取模 c语言代码

```c #include <stdio.h> #include <stdlib.h> #define MOD 18446744073709551616 int cmp(const void *a, const void *b) { return *(int*)a - *(int*)b; } unsigned long long minCost(int n, int *num, int *cost) { qsort(cost, n, sizeof(int), cmp); unsigned long long totalCost = 0; for (int i = 0; i < n; i++) { totalCost += (unsigned long long)num[i] * cost[i] % MOD; } return totalCost % MOD; } int main() { int n; scanf("%d", &n); int *num = (int*)malloc(n * sizeof(int)); int *cost = (int*)malloc(n * sizeof(int)); for (int i = 0; i < n; i++) { scanf("%d", &num[i]); } for (int i = 0; i < n; i++) { scanf("%d", &cost[i]); } unsigned long long result = minCost(n, num, cost); printf("%llu\n", result); free(num); free(cost); return 0; } ``` [2024-11-10 19:21:52 | AI写代码神器 | 570点数解答]

相关提问