T239493 [AHOI2002]黑白图像压缩 200141530-高清影
题目描述
选修基础生物基因学的时候, 小可可在家里做了一次图像学试验。 她知道:整个图像其实就是若干个图像点(称作像素)的序列,假定序列中像素的个数总是 8 的倍数, 于是每八个像素可以转换成一个叫做字节的数, 从而这个表示图像的像素序列就被转换成了字节的序列。
所谓的字节就是一个八位的二进制数(当然,为了便于书写,人们经常用它的十进制形式来表示)。这八个像素从前向后依次对应于字节从高位到低位的八个位, 用 0 来表示白色像素、 1 来表示黑色像素。 这种表示方法叫做位图法。 例如字节序列 210、 0、255 表示了 8*3=24 个像素, 由于对应的二进制形式是 11010010、 00000000、11111111, 所以这 24 个像素的颜色依次是黑、 黑、 白、 黑、 白、 白、 黑、 白、白、白、白、白、白、白、白、白、黑、黑、黑、黑、黑、黑、黑、黑。
小可可想: 其实图像中存在着很多连续的同色像素段, 也许换一种方式表达图像能够减少图像的数据量。 她的思路是: 把像素按照颜色分成若干个片段, 同一个片段中各像素颜色相同, 且连续的同色像素都在同一个片段中。同时已知每个片段的最大长度小于 128。
每一个像素片段都是用一个二进制字节量来表示, 最高位表示片段中像素的颜色, 而低七位表示片段中像素的数目。注意:不存在长度为 0 的像素片段。这种表示法叫做像素片段法。
例如位图表示法的字节序列 210、 0、 255 对应的像素序列可以分成七个片段,分别是: 11、 0、 1、 00、 1、 000000000、 11111111。如果用像素片段法来表示的话,二进制字节序列应该写成 10000010、 00000001、 10000001、00000010、 10000001、 00001001、 10001000, 而其对应于十进制字节序列就是 130、 1、 129、 2、 129、 9、 136。
像素片段法是否能有效地减少图像的数据存储量呢?小可可不知道如何用数学的方法加以证明, 于是决心对手头上的图像做些试验, 看看该方法是否真的有效。 请你编写程序完成图像信息的转换, 以协助小可可完成这项试验。
输入格式
文件中以一行的形式存放了一个图像的信息。第一个数是正整数 nn ,表明该图像有 nn 个像素。随后有 \frac{n}{8}8n 个十进制形式的字节量,表示该图像的位图信息。相邻数之间用一个空白字符隔开。
输出格式
以一行的形式输出以像素片段表示法表示的图像信息,各个数都以
十进制的形式出现,相邻数之间用一个空白字符隔开。
输入输出样例
8 0
8
24 210 0 255
130 1 129 2 129 9 136
说明/提示
1\leq n\leq 8\times 10^41≤n≤8×104。
还好,终于有一题能自己做的题了。
1 #include <iostream> 2 3 using namespace std; 4 5 6 int main() 7 { 8 int *a,*b,m,n,j,i,k=1,*c; 9 int tap; 10 cin>>m; 11 n=m/8; 12 a=new int[n+1]; 13 b=new int[n*8+1]; 14 for(i=0;i<n;i++) 15 cin>>a[i]; 16 17 18 for(j=0;j<n;j++) 19 { 20 for(i=j*8+7;i>=j*8;i--) 21 { 22 b[i]=a[j]%2; 23 a[j]=a[j]/2; 24 // cout<<b[i]; 25 } 26 //cout<<endl; 27 // cout << a[j] << endl; 28 } 29 // for(i=0;i<24;i++)cout<<b[i]; 30 for(i=0;i<24;i++) 31 { 32 k=1; 33 if(b[i]==0) 34 { 35 36 for(i=i+1;i<24;i++) 37 { 38 if(b[i]==0)k++; 39 else {i--; 40 break; 41 } 42 } 43 cout<<k<<" "; 44 45 } 46 else 47 { 48 49 for(i=i+1;i<24;i++) 50 { 51 if(b[i]==1)k++; 52 else {i--; 53 break; 54 } 55 56 } 57 cout<<k+128<<" "; 58 } 59 } 60 delete []b; 61 delete []a; 62 return 0; 63 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?