【kAriOJ】离散数学 构造群码 极大似然法解码
A. 编程题1 构造群码
题目描述
针对给定H,计算群码编码函数eH,并计算给定字的码字。
输入格式
第一行输入两个整数m,n;(m < n ,n < 10)
第二行输入m × (n - m) 个0或1,也就是矩阵H的上半部分,下半部分单位矩阵自行生成;
第三行输入m比特的字;
输出格式
第一行输出该编码函数能检测到的错误位数;
第二行输出给定字的码字;
输入样例
2 5
1 1 0 0 1 1
1 1
输出样例
2
11101
能检测到的错误位数,就是0~$2^m-1$生成的编码和0的非零距离的最小值-1。
编码就直接乘上[I|H],有个地方害我一直wa的,就是int k=0; if(g&(1<<j))k=1; bn[i]^=k&h[m-j][i];我写成了 bn[i]^=g&(1<<j)&h[m-j][i];
/*
TASK:构造群码
LANG:C++
URL:http://code.bupt.edu.cn/problem/contest/491/problem/A/
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define N 30
#define ll long long
using namespace std;
int n,m,h[N][N];
int bm[N],bn[N];
//计算n长度的a的权
int weight(int *a){
int ans=;
for(int i=;i<=n;i++)
ans+=a[i];
return ans;
}
//计算最多检测的错误
int getk(){
int ans=;
//g的二进制即生成的Bm
for(ll g=;g<<<m;g++){
memset(bn,,sizeof bn);
for(int i=;i<=n;i++)
for(int j=m-;j>=;j--){
int k=;
if(g&(<<j))k=;
bn[i]^=k&h[m-j][i];
}
int w=weight(bn);
if(w)ans=min(ans,weight(bn));
}
return ans-;
}
int main() {
scanf("%d%d",&m,&n);
for(int i=;i<=m;i++){
for(int j=m+;j<=n;j++)
scanf("%d",&h[i][j]);
h[i][i]=;
}
printf("%d\n",getk()); for(int i=;i<=m;i++)
scanf("%d",&bm[i]);
//将bm编码成bn
for(int i=;i<=n;i++){
bn[i]=;
for(int j=;j<=m;j++)
bn[i]^=bm[j]&h[j][i];
}
for(int i=;i<=n;i++)printf("%d",bn[i]); return ;
}
A. 编程题2 极大似然法解码
题目描述
给定群码(m,n)的编码函数e的H,采用极大似然法进行解码 (n<=20)
输入格式
第一行输入两个整数m,n;
第二行输入m × (n - m) 个0或1,也就是矩阵H的上半部分,下半部分单位矩阵自行生成;
第三行输入n比特的字;
输出格式
第一行:输出与e相关的极大似然法能纠错的比特数
第二行:采用极大似然法对给定的字解码后的字
输入样例
3 6
1 1 0 1 0 1 0 1 1
001110
输出样例
1
011
在所有编码和0的距离时,把编出来的码记录起来,然后解码时遍历所有编码,找到距离最近的,就是答案了。
/*
TASK:极大似然法解码
LANG:C++
URL:http://code.bupt.edu.cn/problem/contest/492/problem/A/
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define N 50
#define ll long long
using namespace std;
int n,m,h[N][N];
int bm[N];
ll bn[][N];
int tmp[N];
//计算n长度的a的权
int weight(ll a[N]){
int ans=;
for(int i=;i<=n;i++)
ans+=a[i];
return ans;
}
//计算最多检测的错误,同时计算得到所有的对应编码
int getk(){
int ans=;
//g的二进制即生成的Bm
for(ll g=;g<<<m;g++){
for(int i=;i<=n;i++)
for(int j=m-;j>=;j--){
int k=;
if(g&(<<j))k=;
bn[g][i]^=k&h[m-j][i];
}
int w=weight(bn[g]);
if(w)ans=min(ans,w);
}
return (ans-)/;
}
int getn(){
int mi=,ans=;
for(ll g=;g<<<m;g++){
int dif=;
for(int i=;i<=n;i++){
if(bn[g][i]!=tmp[i])dif++;
}
if(mi>dif){
mi=dif;
ans=g;
}
}
return ans;
}
int main() {
scanf("%d%d",&m,&n);
for(int i=;i<=m;i++){
for(int j=m+;j<=n;j++)
scanf("%d",&h[i][j]);
h[i][i]=;
}
printf("%d\n",getk()); for(int i=;i<=n;i++){
char c;
scanf(" %c",&c);
tmp[i]=c-'';
}
int ans=getn();
for(int i=m-;i>=;i--)
printf("%d",(<<i)&ans?:);
return ;
}
【kAriOJ】离散数学 构造群码 极大似然法解码的更多相关文章
- 深度学习原理与框架-Tfrecord数据集的制作 1.tf.train.Examples(数据转换为二进制) 3.tf.image.encode_jpeg(解码图片加码成jpeg) 4.tf.train.Coordinator(构建多线程通道) 5.threading.Thread(建立单线程) 6.tf.python_io.TFR(TFR读入器)
1. 配套使用: tf.train.Examples将数据转换为二进制,提升IO效率和方便管理 对于int类型 : tf.train.Examples(features=tf.train.Featur ...
- 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念
转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...
- java一切乱码的解释 以及源头【转】
工作中经常遇到java编码问题,由于缺乏研究,总是无法给出确切的答案,这个周末在网上查了一些资料,在此做些汇总. 问题一:在java中读取文件时应该采用什么编码? Java读取文件的方式总体可以分为两 ...
- java编码问题
工作中经常遇到java编码问题,由于缺乏研究,总是无法给出确切的答案,这个周末在网上查了一些资料,在此做些汇总. 问题一:在java中读取文件时应该采用什么编码? Java读取文件的方式总体可以分为两 ...
- Java编码问题汇总
转自 http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html Thanks Java编码问题汇总 工作中经常遇到java编码问 ...
- JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题
JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题 在JAVA下输出文件流,保存成CSV(用UTF-8)文件,怎么处理用EXCEL下是乱码,但是在记事本等其他软件都是正 ...
- 构造 + 离散数学、重言式 - POJ 3295 Tautology
Tautology Description WFF 'N PROOF is a logic game played with dice. Each die has six faces represen ...
- 【kAriOJ】离散数学春季学期编程测试 1
A.凯撒密码 题意: 给你k1,k2,和一串明文,一串密文. 明文用k1加密,密文用k2解密. 对于明文要把字母转换成大写字母,非字母全部删除. 额:要考虑到取模可能会变成负数,所以要加一下26再取模 ...
- java中文乱码解决之道(五)-----java是如何编码解码的
在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...
随机推荐
- Solr 4.0 部署实例教程
Solr 4.0 部署实例教程 Solr 4.0的入门基础教程,先说一点部署之后肯定会有人用solrj,solr 4.0好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为H ...
- 基于nutz框架理解Ioc容器
同样我们从问题入手去验证以及去理解Ioc容器都做了哪些事情: 1.nutz是有几种方式获取需要容器管理bean的信息? 第一种是使用json格式的文件进行配置,如: 第二种:使用注解@IocBean ...
- vim easy-align插件使用
https://github.com/junegunn/vim-easy-align 用vundle安装, 添加下面到vimrc Plugin 'junegunn/vim-easy-align' &q ...
- break、continue、return
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- TNS-12502: TNS:listener received no CONNECT_DATA from client
检查我们的一台ORACLE数据库的监听日志发现有不少TNS-12502错误信息.如下所示 TNS-12502: TNS:listener received no CONNECT_DATA from c ...
- Mysql有用的面试题
A.一道SQL语句面试题,关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2 ...
- Mysql慢查询和慢查询日志分析
Mysql慢查询和慢查询日志分析 众所周知,大访问量的情况下,可添加节点或改变架构可有效的缓解数据库压力,不过一切的原点,都是从单台mysql开始的.下面总结一些使用过或者研究过的经验,从配置以 ...
- logback配置详解2<appender>
logback 常用配置详解(二) <appender> <appender>: <appender>是<configuration>的子节点,是负责写 ...
- 开源一个windows下的定时任务框架,简单粗暴好用。
这里是你想要的功能: 支持插件,将你要执行的任务编译成程序集放到框架的根目录下,再进行简单的配置就行了. 支持Corn表达式.想让任务在什么时候执行就在什么时候执行. 支持安装成windows ser ...
- ClearContainer 网络部分源码分析
// cc-oci-runtime/src/oci.c /*! * Create the state file, apply mounts and run hooks, but do not star ...