天天看點

【洛谷】P1320 壓縮技術(續集版)(暴力)P1320 壓縮技術(續集版)

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