专栏文章
题解:P14602 [NWRRC 2025] Compact Encoding
P14602题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mimywguk
- 此快照首次捕获于
- 2025/12/01 17:49 3 个月前
- 此快照最后确认于
- 2025/12/01 17:49 3 个月前
显然直接按照题意模拟。
把 转换成二进制(注意要倒序存),从低位到高位七位一分块,最高位的一个块可能不足七位就补 。除最后一个块外其他块加 。
以及需要特判 。
代码
在众多可行的实现中选择了最唐的一种。
CPP#include<iostream>
using namespace std;
int n;
int a[30];
int tmp[35]={0},cnt=0;
int idx=0;
void fz(int x){//二进制拆分
while(x){
tmp[++cnt]=x&1;
x>>=1;
}
for(int i=1;i<=cnt/2;i++){
int t=tmp[i];tmp[i]=tmp[cnt-i+1];tmp[cnt-i+1]=t;
}//逆序
int ans=0;
for(int i=1;i<=cnt;i++){
ans*=2;
ans+=tmp[i];
}
n=ans;
}
void gtw(int x){
int tag=(7-cnt%7)%7,tmpp=0;//补0
for(int i=1;i<=cnt;i++){
tmpp*=2;tmpp+=tmp[i];
tag++;
if(tag==7){
if(i!=cnt)a[++idx]=tmpp+128;
else a[++idx]=tmpp;
tag=0;
tmpp=0;
}
}
}
int main(){
cin >> n;
if(n==0){
cout << 0;
return 0;
}
fz(n);
gtw(n);
for(int i=1;i<=idx;i++)cout << a[i] << " ";
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...