组队赛130930 - from lanshui_Yang

本文深入探讨了BNU27542(LA4875)JustTheSimpleFax算法的解码与编码过程,通过提供详细的代码实现和注释,帮助读者理解并应用这些算法于实际场景。包括输入技巧的说明和解码、编码的具体步骤,旨在提升读者在模拟和通信领域的技术能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BNU 27542 (LA 4875)Just The Simple Fax 

        大模拟,不再详述,但是此题的输入还是有技巧的,可以借鉴。直接上代码:

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <vector>

#define mem(a , b) memset(a , b , sizeof(a))
#define MAX 1000
#define INF 1e8
using namespace std ;
const int HU = 80 ;
const int MAXN = 10005 ;
int pan1 = 1 << 3 ;
int b0 = 7 ;
char s[MAXN] ;
char ans[MAXN] ;
int t[MAXN] ;
int ca ;
int B ;
int n ;
int k ;
int len ;
int cnt ;
char tmp[MAXN] ;
char zf(int x)
{
    if(x >= 10)
        return 'A' + x - 10 ;
    return '0' + x ;
}
void init()  // 输入
{
    int i ;
    for(i = 0 ; i < n ; i ++)
    {
        scanf("%s" , s + i * 80) ;  // 技巧性
    }
}
void prechu()
{
    len = strlen(s) ;
    int i ;
    for(i = 0 ; i < len ;)
    {
        int st = i ;
        int e = i ;
        char a , b ;
        a = s[st] ;
        b = s[st + 1] ;
        int sum = 0 ;
        while (1)
        {
            if(e < len && s[e] == a && s[e + 1] == b)
            {
                sum ++ ;
                e += 2 ;
            }
            else
                break ;
        }
        int j ;
        for(j = st ; j < e ; j ++)
        {
            t[j] = sum ;
        }
        i = e ;
    }
}
void midchu()
{
    int i ;
    int k ;
    for(i = 0 ; i < len ;)
    {
        k = 0 ;
        int st = i ;
        int e = i ;
        char a , b ;
        a = s[st] ;
        b = s[st + 1] ;
        if(t[e] <= 2)
        {
            while (e < len && t[e] <= 2)
            {
                if(k == 128)
                {
                    break ;
                }
                k ++ ;
                e += 2 ;
            }
            int tg = k - 1 ;
            tg = k - 1 ;
            tg = tg >> 4 ;
            ans[cnt ++] = zf(tg) ;
            tg = k - 1 ;
            tg = tg & 15 ;
            ans[cnt ++] = zf(tg) ;
            for(int tk = st ; tk < e ;)
            {
                ans[cnt ++] = s[tk ++] ;
            }
            i = e ;
        }
        else
        {
            while (e < len && s[e] == a && s[e + 1] == b)
            {
                if(k == 130)
                {
                    break ;
                }
                k ++ ;
                e += 2 ;
            }
            if(k >= 3)
            {
                k -= 3 ;
                int tg = k ;
                tg = tg | (1 << 7) ;
                int tg1 = tg >> 4 ;
                ans[cnt ++] = zf(tg1) ;
                tg1 = tg & 15 ;
                ans[cnt ++] = zf(tg1) ;
                ans[cnt ++] = a ;
                ans[cnt ++] = b ;
            }
            else
            {
                int tg = k - 1 ;
                tg = k - 1 ;
                tg = tg >> 4 ;
                ans[cnt ++] = zf(tg) ;
                tg = k - 1 ;
                tg = tg & 15 ;
                ans[cnt ++] = zf(tg) ;
                for(int tk = 0 ; tk < k ; tk ++)
                {
                    ans[cnt ++] = a ;
                    ans[cnt ++] = b ;
                }
            }
            i = e ;
        }
    }
}
void solve()
{
    prechu() ;
    midchu() ;
    printf("%d %d\n" , ca , cnt / 2) ;
    int i ;
    for(i = 0 ; i < cnt ; i ++)
    {
        if(i % HU == 0 && i > 0) puts("") ;
        printf("%c" , ans[i]) ;
    }
    puts("") ;
}
int main()
{
    int T ;
    scanf("%d" , &T) ;
    while (T --)
    {
        scanf("%d%d" , &ca , &B) ;
        B += B ;
        cnt = 0 ;
        n = B / HU ;
        if(B % HU != 0)
            n ++ ;
        init() ;
        solve() ;
    }
    return 0;
}

LA 4876 Show Me The Fax (和上题互为逆过程,不过此题较简单)

      直接上代码:

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <vector>

#define mem(a , b) memset(a , b , sizeof(a))
#define MAX 1000
#define INF 1e8
using namespace std ;
const int HU = 80 ;
const int MAXN = 10005 ;
int pan1 = 1 << 3 ;
int b0 = 7 ;
char s[MAXN] ;
char ans[MAXN] ;
int ca ;
int B ;
int n ;
int k ;
int len ;
int cnt ;
int isUp(char x)
{
    if(x >= 'A' && x <= 'Z')
        return 1 ;
    return 0 ;
}
void init()
{
    int i ;
    for(i = 0 ; i < n ; i ++)
    {
        scanf("%s" , s + i * 80) ;
    }
}
void solve()
{
    len = strlen(s) ;
    int i , j ;
    for(j = 0 ; j < len ;)
    {
        int a , b ;
        if(isUp(s[j]))
        {
            a = s[j] - 'A' + 10 ;
        }
        else
        {
            a = s[j] - '0' ;
        }
        j ++ ;
        if(isUp(s[j]))
        {
            b = s[j] - 'A' + 10 ;
        }
        else
        {
            b = s[j] - '0' ;
        }
        int ts = 0 ;
        if(a & pan1)
        {
            a &= b0 ;
            a = a << 4 ;
            ts = a + b ;
            ts += 3 ;
            for(k = 0 ; k < ts ; k ++)
            {
                ans[cnt ++ ] = s[j + 1] ;
                ans[cnt ++ ] = s[j + 2] ;
            }
            j += 3 ;
        }
        else
        {
            a = a << 4 ;
            ts = a + b ;
            ts ++ ;
            for(k = 0 ; k < ts ; k ++)
            {
                j ++ ;
                ans[cnt ++ ] = s[j] ;
                j ++ ;
                ans[cnt ++ ] = s[j] ;
            }
            j ++ ;
        }
    }
    printf("%d %d\n" , ca , cnt / 2) ;
    for(i = 0 ; i < cnt ; i ++)
    {
        if(i % HU == 0 && i > 0) puts("") ;
        printf("%c" , ans[i]) ;
    }
    puts("") ;
}
int main()
{
    int T ;
    scanf("%d" , &T) ;
    while (T --)
    {
        scanf("%d%d" , &ca , &B) ;
        B += B ;
        cnt = 0 ;
        n = B / HU ;
        if(B % HU != 0)
            n ++ ;
        init() ;
        solve() ;
    }
    return 0;
}










内容概要:本文主要介绍了MySQL元数据的概念及其获取方式。MySQL元数据是关于数据库和其对象(如表、列、索引等)的信息,存储在系统表中,这些表位于information_schema数据库中。文章详细列举了多种常用的MySQL元数据查询命令,如查看所有数据库(SHOW DATABASES)、选择数据库(USE database_name)、查看数据库中的所有表(SHOW TABLES)、查看表的结构(DESC table_name)、查看表的索引(SHOW INDEX FROM table_name)、查看表的创建语句(SHOW CREATE TABLE table_name)、查看表的行数(SELECT COUNT(*) FROM table_name)、查看列的信息以及查看外键信息等。此外,还介绍了information_schema数据库中的多个表,包括SCHEMATA表、TABLES表、COLUMNS表、STATISTICS表、KEY_COLUMN_USAGE表和REFERENTIAL_CONSTRAINTS表,这些表提供了丰富的元数据信息,可用于查询数据库结构、表信息、列信息、索引信息等。最后,文章还给出了获取查询语句影响的记录数的Perl和PHP实例,以及获取数据库和数据表列表的方法。 适合人群:对MySQL数据库有一定了解,想要深入学习MySQL元数据获取和使用的数据库管理员或开发人员。 使用场景及目标:①帮助用户掌握MySQL元数据的获取方法,以便更好地管理和维护数据库;②通过查询information_schema数据库中的系统表,深入了解数据库结构、表信息、列信息、索引信息等;③提供Perl和PHP实例,方便用户在不同编程环境中获取查询语句影响的记录数和数据库及数据表列表。 其他说明:在使用上述SQL语句时,请注意将查询中的'your_database_name'和'your_table_name'替换为实际的数据库名和表名。此外,在获取数据库和数据表列表时,如果没有足够的权限,结果将返回null。
经验模态分解(Empirical Mode Decomposition,EMD)是一种基于数据的信号处理技术,由Nigel Robert Hocking在1998年提出,主要用于分析非线性、非平稳信号。它能够将复杂的信号自适应地分解为若干个本征模态函数(Intrinsic Mode Function,IMF),每个IMF代表信号中不同的频率成分和动态特征。在MATLAB环境下实现EMD去噪,通常包括以下步骤: 信号预处理:对原始信号进行预处理,例如平滑处理或去除异常值,以提高后续分解的准确性。 EMD分解:利用EMD算法对预处理后的信号进行分解,将其拆分为多个IMF和一个残余项。每个IMF对应信号的一个内在频率成分,而残余项通常包含低频或直流成分。 希尔伯特变换:对每个IMF进行希尔伯特变换,计算其瞬时幅度和相位,形成希尔伯特谱,从而更直观地分析信号的时频特性。 去噪策略:常见的去噪策略有两种。一种是根据IMF的频率特性,选择保留低频或高频部分,去除噪声;另一种是利用IMF的Hurst指数,噪声IMF的Hurst指数通常较低,因此可以去除Hurst指数低于阈值的IMF。 重构信号:根据保留的IMF和残余项,通过逆希尔伯特变换和累加,重构出去噪后的信号。 Hurst分析:Hurst指数是评估时间序列长期依赖性的指标,用于区分随机性和自相似性。在EMD去噪中,Hurst分析有助于识别噪声IMF,从而提升去噪效果。 在提供的压缩包中,“license.txt”可能是软件的许可协议文件,用户需遵循其条款使用代码。“EMD-DFA”可能是包含EMD去噪和去趋势波动分析(Detrended Fluctuation Analysis,DFA)的MATLAB代码。DFA是一种用于计算信号长期自相关的统计方法,常与EMD结合,进一步分析信号的分形特征,帮助识别噪声并优化去噪效果。该MATLA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值