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