UVa 10887 - Concatenation of Languages

本文针对UVa10887-Concatenation of Languages问题进行解答,探讨了使用cin与gets的区别及hash值计算为何需保证为正数等问题。通过具体代码示例,帮助读者理解字符串拼接算法的实现细节。

题目链接:UVa 10887 - Concatenation of Languages

这题目最后看了GooMaple的代码才AC了,还是有几个疑问。

1、为什么用cin读串不行,用gets可以,题目说了字符是从'a'~'z'的,没有空格的话我认为用哪个读都是一样的。

2、为什么hash那块需要保证是正数,sum怎么算也应该不是负数。

希望有大神可以指点一二。

#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

const int  MAX_N =  1500 * 1500 + 100;
const int  MAX_M =  10 + 5;
const int HASH_CODE = 177;
char A[1505][MAX_M];
char B[1505][MAX_M];
int next[MAX_N];
int head[MAX_N];
char uni[MAX_N][MAX_M * 2];
int T,M,N;
int cnt;

int hash(char *str)
{
    int sum = 0;
    while(*str)
    {
        sum = sum * HASH_CODE + *str;
        str++;
    }
    return (sum & 0x7FFFFFFF) % MAX_N;//确保是正数
}
void try_to_insert(int s)
{
    int h = hash(uni[s]);
    int u = head[h];
    while(u)
    {
        if(!strcmp(uni[u],uni[s]))
            return ;//找到了,插入失败
        u = next[u];
    }
    next[s] = head[h];
    head[h] = s;
    cnt++;
}
int main()
{
    cin>>T;
    int num = 0;
    while(T--)
    {
        memset(head, 0, sizeof(head));
        cnt = 1;
        cin>>M>>N;
        int i,j;
        getchar();//吸回车
        for(i = 0;i < M;i++)
            gets(A[i]);
        for(i = 0;i < N;i++)
            gets(B[i]);
        for(i = 0;i < M;i++)
            for(j = 0;j < N;j++)
            {
                sprintf(uni[cnt],"%s%s", A[i], B[j]);
                try_to_insert(cnt);
            }
        cout<<"Case "<<++num<<": "<<cnt - 1<<endl;
    }
}


基于部落竞争与成员合作算法(CTCM)融合动态窗口法DWA的无人机三维动态避障方法研究,MATLAB代码 动态避障路径规划:基于部落竞争与成员合作算法(CTCM)融合动态窗口法DWA的无人机三维动态避障方法研究,MATLAB 融合DWA的青蒿素优化算法(AOA)求解无人机三维动态避障路径规划,MATLAB代码 基于动态环境下多智能体自主避障路径优化的DWA算法研究,MATLAB代码 融合DWA的青蒿素优化算法AOA求解无人机三维动态避障路径规划,MATLAB代码 基于DWA的多智能体动态避障路径规划算法研究,MATLAB代码 融合动态窗口法DWA的粒子群算法PSO求解无人机三维动态避障路径规划研究,MATLAB代码 基于粒子群算法PSO融合动态窗口法DWA的无人机三维动态避障路径规划研究,MATLAB代码 基于ACOSRAR-DWA无人机三维动态避障路径规划,MATLAB代码 基于ACOSRAR-DWA无人机三维动态避障路径规划,MATLAB代码 基于DWA的动态环境下无人机自主避障路径优化,MATLAB代码 基于DWA的动态环境下机器人自主避障路径规划,MATLAB代码 基于城市场景下RRT、ACO、A*算法的无人机三维路径规划方法研究,MATLAB代码 基于城市场景下无人机三维路径规划的导航变量的多目标粒子群优化算法(NMOPSO),MATLAB代码 导航变量的多目标粒子群优化算法(NMOPSO)求解复杂城市场景下无人机三维路径规划,MATLAB代码 原创:5种最新多目标优化算法求解多无人机协同路径规划(多起点多终点,起始点、无人机数、障碍物可自定义),MATLAB代码 原创:4种最新多目标优化算法求解多无人机协同路径规划(多起点多终点,起始点、无人机数、障碍物可自定义),MATLAB代码 高维超多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维
<think>嗯,用户想了解如何在TensorFlow或PyTorch中实现按通道拼接。首先,我需要回忆一下这两种框架中常用的拼接函数。PyTorch里应该是torch.cat,而TensorFlow可能是tf.concat。然后,关键点在于指定拼接的维度,也就是通道所在的轴。 接下来,我得考虑用户的使用场景。他们可能是在构建卷积神经网络,比如U-Net或者类似的需要多尺度特征融合的模型。这时候,按通道拼接常用于将不同层的特征图合并,增加通道数。需要明确的是,拼接操作需要除通道维度外其他维度(如高度和宽度)必须相同,否则会出错。 用户可能对维度参数不太清楚,比如在PyTorch中,对于NCHW格式的数据,通道是第1维,所以dim=1;而TensorFlow默认是NHWC,通道是最后一维,所以axis=-1或3。需要举例子说明两种框架的用法,同时提醒维度一致的要求。 另外,用户可能有隐式的疑问,比如为什么要用按通道拼接而不是其他方式,比如相加。这时候可以简单提一下拼接的好处,比如保留更多信息,但也会增加计算量。不过用户的问题主要是如何实现,所以这部分可以作为扩展稍微提一下。 还需要检查是否有相关引用可以支持。比如引用[4]提到AGs可以整合到标准CNN如U-Net,可能涉及到特征拼接,但不确定,所以可能不直接引用。其他引用似乎不相关,所以可能不需要添加引用。 最后,生成相关问题时要考虑用户可能的后续问题,比如维度不匹配怎么办,应用场景,性能影响等,这样可以帮他们深入理解。</think>在深度学习框架中,按通道拼接(channel-wise concatenation)主要通过指定维度参数实现。以下是TensorFlow和PyTorch的具体实现方法: ### 一、PyTorch实现 使用`torch.cat`函数,指定拼接维度为通道维度(通常为`dim=1`): ```python import torch # 输入特征图形状:(batch_size, channels, height, width) x1 = torch.randn(2, 64, 128, 128) # 64通道 x2 = torch.randn(2, 32, 128, 128) # 32通道 # 沿通道维度拼接 concatenated = torch.cat((x1, x2), dim=1) print(concatenated.shape) # 输出:torch.Size([2, 96, 128, 128]) ``` ### 二、TensorFlow实现 使用`tf.concat`函数,指定拼接轴为通道轴(通常为`axis=-1`或`axis=3`): ```python import tensorflow as tf # 输入特征图形状:(batch_size, height, width, channels) x1 = tf.random.normal([2, 128, 128, 64]) # 64通道 x2 = tf.random.normal([2, 128, 128, 32]) # 32通道 # 沿通道维度拼接 concatenated = tf.concat([x1, x2], axis=-1) print(concatenated.shape) # 输出:(2, 128, 128, 96) ``` ### 关键注意事项: 1. 拼接时除通道维度外,其他维度必须完全相同 2. 常用于: - U-Net等分割网络的跳跃连接[^4] - 多尺度特征融合 - 多模态数据融合(如RGB+深度图)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值