题解 | #合并表记录#
合并表记录
http://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201
这题如果没有11111111的话可以使用哈希表(该题硬要用就会内存超限),但是奈何题目太无奈,我们就换种方法。 首先先定义二维数组存储输入的这个表。然后使用快排,对索引进行排序,这样就可以让索引相同的值靠在一起,方便我们合并。遍历数组,若下标小于n-1(防止越界)并且该元素与下一个元素的索引相同的时候就可以合并到第二个元素上,如果该元素与下一个元素并不相同就直接输出即可。
#include<stdio.h>
#include<stdlib.h>
int cmp(const void*str1,const void*str2)
{
return (*(int(*)[2])str1)[0] - (*(int(*)[2])str2)[0];
}
int main()
{
int n = 0;
scanf("%d",&n);
int arr[n][2];
for(int i =0;i<n;i++)
{
scanf("%d",&arr[i][0]);
scanf("%d",&arr[i][1]);
}
qsort(arr,n,sizeof(int(*)[2]),cmp);
for(int i =0;i<n;i++)
{
if(arr[i][0]==arr[i+1][0] && i<n-1)
{
arr[i+1][1] +=arr[i][1];
}
else{
printf("%d %d\n",arr[i][0],arr[i][1]);
}
}
return 0;
}