P1320 壓縮技術(續集版)
題目描述
設某漢字由N X N的0和1的點陣圖案組成,如下圖。我們依照以下規則生成壓縮碼。連續一組數值:從漢字點陣圖案的第一行第一個符号開始計算,按書寫順序從上到下,由左到右。第一個數表示連續有幾個0,第二個數表示接下來連續有幾個1,第三個數再接下來連續有幾個0,第四個數接着連續幾個1,以此類推。。。
例如: 以下漢字點陣圖案:
0001000
0001000
0001111
0001000
0001000
0001000
1111111
對應的壓縮碼是: 7 3 1 6 1 6 4 3 1 6 1 6 1 3 7 (第一個數是N ,其餘各位表示交替表示0和1 的個數,壓縮碼保證 N X N=交替的各位數之和)
輸入輸出格式
輸入格式:
漢字點陣圖(點陣符号之間不留白格)。(3<=N<=200)
輸出格式:
一行,壓縮碼。
輸入輸出樣例
輸入樣例#1: 複制
0001000
0001000
0001111
0001000
0001000
0001000
1111111
輸出樣例#1: 複制
7 3 1 6 1 6 4 3 1 6 1 6 1 3 7
【題解】[越來越覺得洛谷有毒] 【簡單題,讀入比較煩。由于是n×n的矩陣,可以考慮先将第一行按字元串讀入通過求s[1]的長度來求n,然後後面幾行循環讀入就行了】 【好吧,現在來說說輸出的坑,注意我題目中标紅的一句話,即如果上來就是1的話,要在前面先輸出一個0】
1 #include<cstdio>
2 #include<cstring>
3 #include<iostream>
4 #include<algorithm>
5 using namespace std;
6 char s[210][210];
7 int num[40010],t,n;
8 int main(){
9 int i=0,a;
10 scanf("%s",s[1]);
11 n=strlen(s[1]);
12 for(i=2;i<=n;++i) scanf("%s",s[i]);
13 printf("%d ",n);
14 a=s[1][0]-48; ++t;
15 if(a) printf("0 ");
16 for(i=1;i<=n;++i)
17 for(int j=0;j<n;++j)
18 if(s[i][j]-48==a) num[t]++;
19 else a=s[i][j]-48,num[++t]++;
20 for(i=1;i<=t;++i) printf("%d ",num[i]);
21 return 0;
22 }
(要練并查集的我不知所措的搞了這麼一個坑題。。。)
轉載于:https://www.cnblogs.com/lris-searching/p/9473498.html