問題描述
在學習了文字處理後,小P對英語書中的𝑛篇文章進行了初步整理。具體來說,小P將所有的英文單詞都轉化為了整數編號。假設這𝑛篇文章中共出現了𝑚個不同的單詞,則把它們從1到𝑚進行編號。這樣,每篇文章就簡化為了一個整數序列,其中每個數都在1到𝑚範圍內。
現給出小P處理後的𝑛篇文章,對於每個單詞𝑖(1≤𝑖≤𝑚),試統計:
- 單詞𝑖出現在了多少篇文章中?
- 單詞𝑖在全部文章中總共出現了幾次?
輸入格式
從標準輸入讀入資料。
輸入共𝑛+1行。
輸入的第一行包含兩個正整數𝑛和𝑚,分別表示文章篇數和單詞編號上限。
輸入的第𝑖+1行(1≤𝑖≤𝑛)包含由空格分隔的若干整數,其中第一個整數𝑙𝑖表示第𝑖篇文章的長度(單詞個數);接下來𝑙𝑖個整數表示對應的整數序列,序列中每個整數均在1到𝑚範圍內,各對應原文中的一個單詞。
輸出格式
輸出到標準輸出。
輸出共𝑚行。
第𝑖i行(1≤𝑖≤𝑚)輸出由空格分隔的兩個整數𝑥𝑖和𝑦𝑖,表示共有𝑥𝑖篇文章包含單詞𝑖,總計出現次數為𝑦𝑖。
樣例輸入
4 3
5 1 2 3 2 1
1 1
3 2 2 2
2 3 2
樣例輸出
2 3
3 6
2 2
樣例解釋
單詞2在:
- 文章1中出現兩次;
- 文章3中出現三次;
- 文章4中出現一次。
因此𝑥2=3、𝑦2=6。
資料範圍
全部的測試資料滿足0<𝑛,𝑚≤100,且每篇文章至少包含一個單詞、最多不超過100個單詞(1≤𝑙𝑖≤100)。
題解
由於單詞已經簡化成數字,開兩個普通陣列分別統計兩個問題即可。
對於第2個問題,單詞在全部文章中出現的次數,開一個陣列計數器,單詞每出現一次,計數器加一
對於第1個問題,由於資料範圍較小,可以開一個二維陣列,vis[i][j]表示在第i篇文章中單詞j是否出現過,最後遍歷一遍統計每一篇文章中出現過的單詞數
1 #include <cstdio> 2 int n,m,l[105],cnt[105]; 3 bool vis[105][105]; 4 int main() 5 { 6 int i,j,x; 7 scanf("%d%d",&n,&m); 8 for (i=1;i<=n;i++) 9 { 10 scanf("%d",&l[i]); 11 for (j=1;j<=l[i];j++) 12 { 13 scanf("%d",&x); 14 cnt[x]++; 15 vis[i][x]=1; 16 } 17 } 18 int s; 19 for (i=1;i<=m;i++) 20 { 21 s=0; 22 for (j=1;j<=n;j++) 23 if (vis[j][i]) 24 s++; 25 printf("%d %d\n",s,cnt[i]); 26 } 27 return 0; 28 }