【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在转码过程中是如何来进行编码 ...
 
随机推荐
- React Native知识4-Image组件
			
一个用于显示多种不同类型图片的React组件,包括网络图片.静态资源.临时的本地图片.以及本地磁盘上的图片(如相册)等 一:属性 1:onLayout function 当元素挂载或者布局改变的时候调 ...
 - 基于Ruby的watir-webdriver自动化测试方案与实施(三)
			
接着基于Ruby的watir-webdriver自动化测试方案与实施(二) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ... 编写脚本 ...
 - 使用Project进行项目管理 - 项目管理系列文章
			
前面当项目经理的时候曾经用到过Project来进行项目管理.这些天闲着无事,将代码翻出来留念了一下,现在将Project项目管理的东西也翻出来玩玩. 微软的Project是一款不错的软件,经过微软这么 ...
 - 敏捷开发XP
			
一.组建XP团队 在XP团队中,由以下组成 二.项目相关环境 1.利益相关者:与PM一样,对项目进行管理 2.执行发起人:最终客户(必须定期演示) 三.XP组成 四.思考 1.结 ...
 - ORACLE 解锁、找回表和找回程序语句
			
最近在工作中同事们经常遇到锁表.误删表和程序覆盖的情况,现总结下遇到这三种情况的解决方案: 1.暴力删除锁表 当表被某些语句占用无法停止,或者出现事物阻塞的情况下,需要手动删除锁(万不得已的情况下用) ...
 - 【转载】Markdown使用笔记
			
献给写作者的 Markdown 新手指南 http://www.jianshu.com/p/q81RER 「简书」作为一款「写作软件」在诞生之初就支持了 Markdown,Markdown 是一种「电 ...
 - 2016.10.30 NOIP模拟赛 day2 AM 整理
			
题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分 2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...
 - P1774 最接近神的人_NOI导刊2010[树状数组 逆序对 离散化]
			
题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ...
 - Freemarker与Servlet
			
1.导入jar包(freemarker.jar) 2.web.xml配置一个普通servlet <servlet> <servlet-name>hello</servle ...
 - 使用python实现appium的屏幕滑动
			
前些日子写一个滑动手机页面的小脚本,看到大家给的内容都是swipe方法,这里对swipe方法做一个小介绍: Swipe(int start x,int start y,int end x,int y, ...