这个题有2个思路,第一中,Hash比较快,简洁。第二中,有序表的“合并”。
哈希的可以得满分,而有序表的合并处理只得17分,总是部分错误。
HASH:
//hash
#include<stdio.h>
#define SIZE 1100
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
#endif
int k;
while(scanf("%d", &k)!= EOF){
double buf[SIZE]={0.0};
int pos;
double t;
int i;
for( i=0; i<k;i++){
scanf("%d %lf", &pos, &t);
buf[pos]+=t;
}//for: read a
scanf("%d", &k);
for(i=0; i<k;i++){
scanf("%d %lf", &pos, &t);
buf[pos]+=t;
}//for: read b & plus
int cn=0;
for(i=0; i<SIZE;i++){
if(buf[i] != 0)
cn++;
}//for
printf("%d", cn);
for(i=SIZE-1; i>=0;i--){
if(buf[i] != 0){
printf(" %d %0.1lf", i, buf[i]);
}
}//for
printf("\n");
}//while
return 0;
}
#include<stdio.h>
typedef struct _Node{
int ex;//zhi shu
double co;//xi shu
} Node;
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
#endif
int ka, kb;
while(scanf("%d", &ka) != EOF){
Node bufa[20];
Node bufb[20];
Node bufc[20];
int i;
for(i=0; i<ka; i++){
scanf(" %d %lf", &bufa[i].ex, &bufa[i].co);
}//read a
scanf("%d", &kb);
for(i=0; i<kb; i++){
scanf(" %d %lf", &bufb[i].ex, &bufb[i].co);
}//read b
//add each b to a
i=0;
int j=0, k=0;
while(i< ka && j<kb){
if(bufa[i].ex > bufb[j].ex){
bufc[k].ex=bufa[i].ex;
bufc[k++].co=bufa[i].co;
i++;// a move to next node
}else if(bufa[i].ex < bufb[j].ex){
bufc[k].ex=bufb[j].ex;
bufc[k++].co=bufb[j].co;
j++;// b move to next node
}else{
bufc[k].ex=bufa[i].ex;
bufc[k++].co=bufa[i].co + bufb[j].co;
i++;
j++;//a & b move to next node
}
}
while(i<ka){ //a lefted
bufc[k].ex=bufa[i].ex;
bufc[k++].co=bufa[i].co;
i++;// a move to next node
}
while(j<kb){ // b lefted
bufc[k].ex=bufb[j].ex;
bufc[k++].co=bufb[j].co;
j++;// b move to next node
}
printf("%d", k);
for(i=0; i<k;i++){
if(bufc[i].co != 0){ //系数不为0,输出
printf(" %d %.1lf", bufc[i].ex, bufc[i].co);
}
}
printf("\n");
}//while
return 0;
}