【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在转码过程中是如何来进行编码 ...
随机推荐
- CSS3-01 简介
概述 HTML 文档由包含 HTML 标签的 HTML 元素组成,HTML 标签被用于定义文档的内容.HTML 文档内容没有额外的样式,以纯文本流的方式渲染到浏览器页面.需要借助层叠样式表(CSS)来 ...
- 集合2--毕向东java基础教程视频学习笔记
Day14 08 LinkedList09 LinkedList练习10 ArrayList练习11 ArrayList练习2 12 HashSet13 HashSet存储自定义对象14 HashSe ...
- 聊下 git remote prune origin
在你经常使用的命令当中有一个git branch –a 用来查看所有的分支,包括本地和远程的.但是时间长了你会发现有些分支在远程其实早就被删除了,但是在你本地依然可以看见这些被删除的分支. 你可以通过 ...
- mapreduce导出MSSQL的数据到HDFS
今天想通过一些数据,来测试一下我的<基于信息熵的无字典分词算法>这篇文章的正确性.就写了一下MapReduce程序从MSSQL SERVER2008数据库里取数据分析.程序发布到hadoo ...
- 初探PHP多进程
h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...
- linux basic commands
1. man - an interface to the on-line reference manuals $man man 2. apt - advanced package tool SEE A ...
- 【Windows编程】系列第五篇:GDI图形绘制
上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数 ...
- monkey之monkey简介
1.Monkey 是什么 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序 ...
- ik扩展支持Solr配置
扩展ik原生代码:public class IKAnalyzerTokenizerFactory extends TokenizerFactory{ private boolean useSmart; ...
- ZBrush中该如何调节多个SubTool
我们学习了人体的基本雕刻,了解了人体结构.比例.骨骼.肌肉对于人物模型雕刻的重要性.本节课对ZBrush中的"Transpose Master"功能进行讲解,这个插件是ZBrush ...