天天看点

【洛谷】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