A. 编程题1 构造群码

时间限制 1000 ms 内存限制 65536 KB

题目描述

针对给定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 极大似然法解码

时间限制 1000 ms 内存限制 65536 KB

题目描述

给定群码(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】离散数学 构造群码 极大似然法解码的更多相关文章

  1. 深度学习原理与框架-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 ...

  2. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

    转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...

  3. java一切乱码的解释 以及源头【转】

    工作中经常遇到java编码问题,由于缺乏研究,总是无法给出确切的答案,这个周末在网上查了一些资料,在此做些汇总. 问题一:在java中读取文件时应该采用什么编码? Java读取文件的方式总体可以分为两 ...

  4. java编码问题

    工作中经常遇到java编码问题,由于缺乏研究,总是无法给出确切的答案,这个周末在网上查了一些资料,在此做些汇总. 问题一:在java中读取文件时应该采用什么编码? Java读取文件的方式总体可以分为两 ...

  5. Java编码问题汇总

    转自 http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html Thanks Java编码问题汇总 工作中经常遇到java编码问 ...

  6. JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题

    JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题 在JAVA下输出文件流,保存成CSV(用UTF-8)文件,怎么处理用EXCEL下是乱码,但是在记事本等其他软件都是正 ...

  7. 构造 + 离散数学、重言式 - POJ 3295 Tautology

    Tautology Description WFF 'N PROOF is a logic game played with dice. Each die has six faces represen ...

  8. 【kAriOJ】离散数学春季学期编程测试 1

    A.凯撒密码 题意: 给你k1,k2,和一串明文,一串密文. 明文用k1加密,密文用k2解密. 对于明文要把字母转换成大写字母,非字母全部删除. 额:要考虑到取模可能会变成负数,所以要加一下26再取模 ...

  9. java中文乱码解决之道(五)-----java是如何编码解码的

    在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...

随机推荐

  1. 浅谈Bluetooth蓝牙开发

    前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据. 因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码. ------------------------- ...

  2. MPMoviePlayerController属性,方法,通知整理

    属性 说明 @property (nonatomic, copy) NSURL *contentURL 播放媒体URL,这个URL可以是本地路径,也可以是网络路径 @property (nonatom ...

  3. iPhone被盗后续更新一:怎么找老机

    [找老机] 还是找警察给你发邮件,然后要求苹果扣机.毕竟全国所有被换机的iPhone最终都会返还到苹果上海的仓库.关键就是一定要快. 当时有群里的朋友,5S被偷,后来警察发邮件,然后苹果允许对方去具体 ...

  4. ORACLE 移动数据文件 控制文件 重做日志文件

    ORACLE数据库有时候需要对存储进行调整,增加分区.IO调优等等,此时需要移动数据文件.重做日志文件.控制文件等等,下文结合例子总结一下这方面的知识点. 进行数据文件.重做日志文件.控制文件的迁移前 ...

  5. SQL Server中的“最大并行度”的配置建议

    SQL Server中的最大并行度(max degree of parallelism)如何设置呢? 设置max degree of parallelism有什么好的建议和指导方针呢?在微软官方文档R ...

  6. [翻译]当分发数据库增长到25G时如何解决

    有时候,分发数据库(Distribution Database)会增长得非常大,那么如何解决呢,请看Chris Skorlinski,  Microsoft SQL Server Escalation ...

  7. MongoDB学习笔记~为IMongoRepository接口更新指定字段

    回到目录 对于MongoDB来说,它的更新建议是对指定字段来说的,即不是把对象里的所有字段都进行update,而是按需去更新,这在性能上是最优的,这当然也是非常容易理解的,我们今天要实现的就是这种按需 ...

  8. Snapshot Instance 操作详解 - 每天5分钟玩转 OpenStack(36)

    本节我们通过日志详细讨论 instance 的 snapshot 操作. 有时候操作系统损坏得很严重,通过 Rescue 操作无法修复,那么我们就得考虑通过备份恢复了.当然前提是我们之前对instan ...

  9. LeetCode#11. Container With Most Water

    问题描述 Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ...

  10. iftop与dstat-一次网站故障分析经历

    一次网站分析与解决的经历,最后结果虽然很简单但是过程比较曲折.记录一下: 今天访问网站首页十分缓慢,页面半天都加载不出来.于是上服务器看看情况,通过top看到load和cpu以及磁盘io都很低,只能祭 ...