【soj 2370】Just The Simple Fax( http://soj.me/show_problem.php?pid=2370)

来源:互联网 发布:网络充值卡怎么用 编辑:程序博客网 时间:2024/06/07 12:10
#include <iostream>using namespace std;int seq[5002];int pos[5002][2];//记录连续重复三次以上的数字的起始位置char result[10008];int result_index;int getv(char a,char b){int result=0;if(b>=65)b-=55;else b-=48;if(a>=65)a-=55;else a-=48;return a*16+b;}void printex(int num){char big=num/16;char small=num%16;if(big>=10)big+=55;else big+=48;if(small>=10)small+=55;else small+=48;result[result_index]=big;//将结果记录起来result[result_index+1]=small;result_index+=2;//cout<<big<<small;}void print_non(int l,int r){if(l>r)return;while(r-l>=127){printex(127);for(int i =l;i<=l+127;i++)printex(seq[i]);l+=128;}printex(r-l);for(int i =l;i<=r;i++)printex(seq[i]);}int main(){int t,casenum,count,index;char a,b;cin>>t;for (int kk=1;kk<=t;kk++){cin>>casenum>>count;index=0;result_index=0;for(int i=0;i<count;i++){cin>>a>>b;seq[i]=getv(a,b);}for(int i=0;i<count;i++){int j=i+1;for(;seq[j]==seq[j-1]&&j<count&&(j-i<130);j++);if(j-i>=3){pos[index][0]=i;pos[index][1]=j;index++;i=j-1;}}if(index==0){print_non(0,count-1);}else{int start=0;for(int i=0;i<index;i++){print_non(start,pos[i][0]-1);printex(128+pos[i][1]-pos[i][0]-3);printex(seq[pos[i][0]]);start=pos[i][1];}print_non(pos[index-1][1],count-1);}cout<<kk<<" "<<result_index/2<<endl;for(int i=0;i<result_index;i++){if(i>0&&i%80==0)cout<<endl;//没留意每行80个的要求,WAcout<<result[i];}cout<<endl;}return 0;}

原创粉丝点击