XTU OJ (二)指针专题

一些想法

优快云 界面丑陋,无关内容、垃圾内容还有广告堆叠如山,各种僵尸号、僵尸粉、AI 水文水贴水评论水回答,最近非常想弃掉这个平台,可毕竟这里算是我梦开始的地方。。。
对我而言 优快云 的优点有:

  • 主页管理方便
  • 对图片上传的限制小
  • 支持 TOC 目录以及侧边栏目录
  • 侧边栏有专栏列表

一番思考后,我决定:

  • 仅用来上传刷题、比赛、实验等的记录还有读书笔记(主要写给自己看,也欢迎校友们围观~)
  • 关闭各种私信、点赞、收藏通知 (不用看就知道是一堆僵尸号
  • 采用浏览器脚本美化界面,屏蔽广告,最近发现的这个效果还不错:优快云 独家UI排版
  • 努力学习前端,设计自己的 优快云 美化脚本

题单

点这里去刷题(仅校内用户)


  • Problem A 1353 Digit String
  • Problem B 1475 冰墩墩和冰壶
  • Problem C 1477 冰墩墩和徽章
  • Problem D 1267 Matrix
  • Problem E 1478 冰墩墩和玩偶
  • Problem F 1449 网格

这个题单的本意是想让大家学习 C 指针的吧,不过Java 中并没有指针的概念哈哈

A 1553 Digit String

模拟,枚举,进制转换


  • 将其他进制转换为 10 10 10 进制可以采用秦九韶算法
    x x x 为基数,第 i i i 位为 a i a_i ai 的整数可以写成:
    f ( x ) = a n x n + a n − 1 x n − 1 + a n − 2 x n − 2 . . . + a 2 x 2 + a 1 x + a 0 = ( a n x n − 1 + a n − 1 x n − 2 + a n − 2 x n − 3 + . . . + a 2 x + a 1 ) x + a 0 = ( ( a n x n − 2 + a n − 1 x n − 3 + a n − 2 x n − 4 + . . . + a 2 ) x + a 1 ) x + a 0    . . . = ( ( ( a n x + a n − 1 ) x + a n − 2 ) x + . . . + a 1 ) x + a 0 \begin{aligned} f(x)& = a_nx^n + a_{n-1}x^{n-1} + a_{n-2}x^{n-2}... + a_2x^2 + a_1x + a_0 \\ & = (a_nx^{n-1} + a_{n-1}x^{n-2} + a_{n-2}x^{n-3} + ... + a_2x + a_1)x + a_0 \\ & = ((a_nx^{n-2} + a_{n-1}x^{n-3} + a_{n-2}x^{n-4} + ... + a_2) x + a_1)x + a_0 \\ &\; ...\\ & = (((a_nx + a_{n-1})x + a_{n -2}) x + ... + a_1)x + a_0 \end{aligned} f(x)=anxn+an1xn1+an2xn2...+a2x2+a1x+a0=(anxn1+an1xn2+an2xn3+...+a2x+a1)x+a0=((anxn2+an1xn3+an2xn4+...+a2)x+a1)x+a0...=(((anx+an1)x+an2)x+...+a1)x+a0
    令:
    f ( 1 ) = a n x + a n − 1        f ( 2 ) = f ( 1 ) x + a n − 2 . . .              f ( n ) = f ( n − 1 ) x + a 0 f(1) = a_nx + a_{n -1} \\ \;\;\; f(2) = f(1)x + a_{n-2} \\ ...\\ \;\;\;\;\;\; f(n) = f(n-1)x+a_0 f(1)=anx+an1f(2)=f(1)x+an2...f(n)=f(n1)x+a0
    即可得到最终的递推公式
  • 在 Java 中可以利用 Integer.parseInt(String s, int radix) 方法将来将一个进制为 radix 的字符串转换为十进制的数字,类似的还有Integet.toString(int i) 可以将十进制值转换为其他进制
  • 需要注意的是, i i i 进制的每一位最大只能到 i − 1 i - 1 i1,因此需要先计算出数码串最小的可能的进制,例如对数码串 321 321 321,最小可能的进制是 4 4 4 进制
  • 然后从最小可能的进制枚举到最大可能进制即 16 16 16 即可

核心代码

/* char 类型字符转成对应的 int 型数字 */
static int trans_to_digit (char ch) {
    if (ch >= '0' && ch <= '9') return ch - '0';
    else return ch - 'A' + 10;
}

/* 使用秦九韶算法将数码串转为十进制值 */
static long trans_to_decimal (String num, int base) {
    long decimal = trans_to_digit(num.charAt(0));
    for (int i = 1; i < num.length(); ++i) {
        int cur = trans_to_digit(num.charAt(i));
        decimal = decimal * base + cur;
    }
    return decimal;
}

static int solve () {
    char max = '\0';
    for (int i = 0; i < num.length(); ++i)
        if (num.charAt(i) > max) max = num.charAt(i);
    for (int base = trans_to_digit(max) + 1; base <= 16; ++base) {
        long tmp = trans_to_decimal(num, base);
        if (tmp == n) return base;
        if (tmp > n) return 0;
    }
    return 0;
}

B 1475 冰墩墩和冰壶

模拟,枚举


  • 分别记录红方和黄方所有的壶离圆心的距离(其实是距离的平方,求真正的距离还要求平方根),记录各自的最小距离
  • 分别枚举红方和黄方的距离,若有比对方离圆心的最小距离还要小的就将分数加一
  • 根据各自的分数输出结果

核心代码

static void solve () {
    Y_score = R_score = 0;
    for (int i = 0; i < r; ++i) {
        if (R_x[i] * R_x[i] + R_y[i] * R_y[i] < Y_min) ++R_score;
    }
    for (int i = 0; i < y; ++i) {
        if (Y_x[i] * Y_x[i] + Y_y[i] * Y_y[i] < R_min) ++Y_score;
    }
}

C 1477 冰墩墩和徽章

模拟,枚举


  • 枚举记录志愿者没有(想要)而冰墩墩有且数目大于 1 1 1 (对方可以用来交换)的徽章种数
  • 枚举记录冰墩墩没有(想要)而志愿者有且数目大于 1 1 1 (对方可以用来交换)的徽章种数
  • 其中较小的那个就是最终的结果

核心代码

static int solve () {
    A_res = B_res = 0;
    for (int i = 1; i <= MAX_SIZE; ++i) {
        if (A[i] > 1 && B[i] == 0) ++A_res;
        if (A[i] == 0 && B[i] > 1) ++B_res;
    }
    return Math.min(A_res, B_res);
}

D 1267 Matrix

模拟


  • 没有什么技巧,直接根据题意模拟就好啦

核心代码

static void swap(int x1, int y1, int x2, int y2) {
    int tmp = matrix[x1][y1];
    matrix[x1][y1] = matrix[x2][y2];
    matrix[x2][y2] = tmp;
}

static void IN () {
    int val = 1;
    int max = Math.max(n, m);
    matrix = new int[max][max];
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) matrix[i][j] = val++;
    }
}

static void TR () {
    for (int i = 0; i < n; ++i) {
        for (int j = i; j < Math.max(n, m); ++j) swap(i, j, j, i);
    }
    int tmp = n;
    n = m;
    m = tmp;
}

static void SR (int x, int y) { 
	for (int j = 0; j < m; ++j) swap(x - 1, j, y - 1, j); 
}

static void SC (int x, int y) { 
	for (int i = 0; i < n; ++i) swap(i, x - 1, i, y - 1); 
}

static void FR () { 
	for (int i = 0; i < n / 2; ++i) SR(i + 1, n - i);
}

static void FC () {
	for (int j = 0; j < m / 2; ++j) SC(j + 1, m - j);
}

E 1478 冰墩墩和玩偶

哈希,递归


  • 自顶向下地递归,将当前串处理完成后递归处理前一半和后一半
  • 将得到的所有字符串加入到哈希集合中进行去重
  • C 语言还是老老实实枚举吧🥹

核心代码

static Set<String> set = new HashSet<>();

static void solve (String str) {
    if (set.contains(str) == false) set.add(str);
    int length = str.length();
    if (length == 1) return ;
    solve_Jun0804(str.substring(0, length / 2));
    solve_Jun0804(str.substring(length / 2));
}

F 1449 网格

模拟


  • 只要找出格子的序号与它的边(火柴棍)的编号之间的关系就好啦

核心代码(进制转换就用 Java 自带的方法偷懒了

static String str;
static List<List<String>> res = new ArrayList<>();

static void solve_Jun0805 () {
    res.clear();
    for (int i = 0; i < n; ++i) res.add(new ArrayList<>());
    for (int i = 0; i < n; ++i) {
        for (int j = (2 * m + 1) * i; j < (2 * m + 1) * i + m; ++j) {
            res.get(i).add(
                Integer.toHexString(
                    Integer.parseInt(
                        "" +
                        str.charAt(j + m) +
                        str.charAt(j) +
                        str.charAt(j + m + 1) +
                        str.charAt(j + 2 * m + 1),
                        2)).toUpperCase());
        }
    }
}
### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值