2013-01-13 11:19:37Morris

[ZJ][計數] d578. 小涵的積木

內容 :

可愛的小涵有很多組相同的積木玩具組合,積木玩具組合裡的每一塊積木上都有一行奇怪的文字,代表該積木的形狀、顏色、等等沒用的資訊。

每一組積木玩具組合中,所含的積木種類跟數量是相同的。

有一天,她把所有積木都裝在同一個箱子裡玩,可是她發現她掉了一塊積木,現在她給你所有其他積木上的文字,想要找出她掉的那一塊積木上面所寫的文字。

輸入說明 :

輸入檔中可能有很多組測試資料。

每組測試資料的第一行有兩個正整數n與m,表示每一組積木組合有n塊積木(n10000000),而小涵共有m組積木組合(2m25)。

接著有(n × m1)行,行中的文字表示每塊目前剩下的積木上面所寫的文字(不超過1000個字元)。
(你可以假設不會有多餘的無效字元,也就是除了換行符號外,所有字元都是該字串的一部分。)

測試資料的輸入檔不超過25MB。 

如果n=m=0,代表測試資料結束,不用輸出任何資料。

輸出說明 :

對每一組輸入資料,輸出一行文字,代表小涵掉的那塊積木上寫的文字。

範例輸入 :

3 3
apple
orange
banana
orange
apple
apple
banana
banana
4 2
D.R S
P@#$sK!
Aplcme U
Aplcme U
H.NK ;M
P@#$sK!
D.R S
0 0

範例輸出 :

orange
H.NK ;M

提示 :

出處 :

(管理:magrady)

很明顯地會發現只有一個的話,在[位置][字元]的統計個數不會被 m 整除。




#include <stdio.h>

int main() {
    int n, m, i, j;
    char str[1024];
    while(scanf("%d %d", &n, &m) == 2 && n) {
        getchar();
        n = n*m-1;
        int cnt[1024][128] = {};
        while(n--) {
            gets(str);
            for(i = 0; str[i]; i++)
                cnt[i][str[i]]++;
        }
        for(i = 0; i < 1024; i++)
            for(j = 0; j < 128; j++)
                if(cnt[i][j]%m)
                    putchar(j), j = 129;
        puts("");
    }
    return 0;
}