[洛谷P3982]龙盘雪峰信息解析器
2024-08-31 13:22:15
题目大意:给你一串代码,要求进行解码。解码规则详见题目。
解题思路:这是一道字符串处理的题目。
首先,有这么几种情况输出Error:
1.代码中出现除了0和1外的字符。
2.代码长度不是8的倍数。
3.在输出字母时发现转化后的数字大于25。
4.进行加法时,第二个数不是一个数单元。
其余情况均能解码。解码时转化一下即可。
答案输出的技巧:本题如果一个操作一个操作输出,可能遇到输出到一半发现Error的情况。解决方案是把答案存在一个字符串当中,最后整个字符串输出即可。
C++ Code:
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
using std::string;
char buf[171118],s[11];
int bufpos;
string ans;
inline void error(){puts("Error");exit(0);}
inline void get(char* s){for(int i=0;i<8;++i,++bufpos)*s++=buf[bufpos];}
int main(){
ans="";
scanf("%s",buf);
for(int i=0;buf[i];++i)if(buf[i]!='0'&&buf[i]!='1')error();
if(strlen(buf)%8)error();
bufpos=0;
while(buf[bufpos]=='0'||buf[bufpos]=='1'){
get(s);
if(s[0]=='1'&&s[1]=='0'&&s[2]=='1'){
int p=0;
for(int i=7,j=1;i>2;--i,j<<=1)
p+=(s[i]-'0')*j;
if(p<26)ans+=(char)(p+'A');else error();
}else
if(s[0]=='1'&&s[1]=='1'&&s[2]=='1')ans+=' ';else
if(s[0]=='0'){
int p=0,pp;
for(int i=7,j=1;i;--i,j<<=1)
p+=(s[i]-'0')*j;
pp=p>>1;p=0;
if(buf[bufpos]!='0')error();
get(s);
for(int i=7,j=1;i;--i,j<<=1)
p+=(s[i]-'0')*j;
p>>=1;p+=pp;
if(p==0)ans+='0';else{
int w=1;
for(;w<=p;w*=10);
for(w/=10;w;w/=10)ans+=(char)((p/w)^'0'),p%=w;
}
}
}
printf("%s\n",ans.c_str());
return 0;
}
最新文章
- c++继承概念
- apk支持html video控制 ,是播放状态就暂停,暂停状态就播放
- django-CSRF verification failed. Request aborted
- vi 常用技巧
- jquery validation ajax 验证
- scp 在不同机器上传文件
- DOM(一)
- 使用FluentScheduler和IIS预加载在asp.net中实现定时任务管理
- VisualStudioCode中用dotnet命令创建多个ASP.NET Core 项目、类库、控制台程序,并添加应用间的引用
- SpringBoot项目中禁用HttpClient那些嘈杂的日志
- php5.6安装redis各个版本地址集合
- MySQL导出数据字典
- 让浏览器兼容H5元素和媒体查询的代码
- [py]django第三方分页器django-pure-pagination实战
- 一个flume agent异常的解决过程记录
- sqlserver 创建用户仅仅能訪问指定视图
- mysql格式化日期
- YouCompleteMe自动补全的安装配置与使用
- Android Design与Holo Theme详解
- Pytorch 一些函数用法