专栏文章

题解:P14602 [NWRRC 2025] Compact Encoding

P14602题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mimywguk
此快照首次捕获于
2025/12/01 17:49
3 个月前
此快照最后确认于
2025/12/01 17:49
3 个月前
查看原文
显然直接按照题意模拟。
nn 转换成二进制(注意要倒序存),从低位到高位七位一分块,最高位的一个块可能不足七位就补 00。除最后一个块外其他块加 128128
以及需要特判 n=0n=0

代码

在众多可行的实现中选择了最唐的一种。
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 条评论,欢迎与作者交流。

正在加载评论...