codeforces CF1736B Playing with GCD

该文提供了一个C++代码解决方案,用于解决关于最大公约数(GCD)和最小公倍数(lcm)的编程问题。代码读取输入,计算数组中相邻元素的lcm,并检查它们的GCD是否符合题目要求。如果所有条件满足,则输出Yes,否则输出No”。

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

Playing with GCD题解

首先先上题目链接:Playing with GCD - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

附上代码

#include <bits/stdc++.h>

# define debug(a) cout<<(#a)<<" = "<<a<<endl
using namespace std;
int cases;
int lcm(int a,int b){
    return a*b/__gcd(a,b);
}
void solve(){
    int n;
    cin>>n;
    int aList[n+1];
    int bList[n+1];
    for (int i = 1; i <= n; ++i) cin>>aList[i];
    bList[0]=aList[1],bList[n]=aList[n];
    for (int i = 1; i < n; ++i) {
        bList[i]=lcm(aList[i],aList[i+1]);
    }
    for (int i = 0; i <n ; ++i) {
        if(__gcd(bList[i],bList[i+1])!=aList[i+1]){
            cout<<"No"<<endl;
            return;
        }
    }
    cout<<"Yes"<<endl;
}
int main() {
    freopen(R"(E:\sduhw\now\ACM\test.in)", "r", stdin);
    freopen(R"(E:\sduhw\now\ACM\test.out)", "w", stdout);
    cin>>cases;
    for (int i = 0; i < cases; ++i) solve();
    return 0;
}
### 使用 BERT 结合 Bi-LSTM-CRF 模型进行自然语言处理任务 #### 构建模型架构 为了有效利用 BERT 的预训练能力和序列标注的能力,通常会先加载预训练的 BERT 模型作为编码器部分。接着,在其顶部添加一层或多层双向 LSTM (BiLSTM),用于捕捉上下文信息并增强特征表示。最后,加入条件随机场(CRF)层来进行最终的标签预测。 ```python import torch.nn as nn from transformers import BertModel, BertTokenizer class BertBiLstmCrf(nn.Module): def __init__(self, num_labels, lstm_hidden_dim=768): super(BertBiLstmCrf, self).__init__() # 加载预训练BERT模型 self.bert = BertModel.from_pretrained('bert-base-chinese') self.lstm = nn.LSTM(input_size=self.bert.config.hidden_size, hidden_size=lstm_hidden_dim//2, bidirectional=True, batch_first=True) self.fc = nn.Linear(lstm_hidden_dim, num_labels) self.crf = CRF(num_tags=num_labels, batch_first=True) def forward(self, input_ids, attention_mask=None, labels=None): outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask)[0] sequence_output, _ = self.lstm(outputs) emissions = self.fc(sequence_output) if labels is not None: loss = -self.crf(emissions, labels, mask=attention_mask.byte(), reduction='mean') return loss else: prediction = self.crf.decode(emissions, mask=attention_mask.byte()) return prediction ``` 此代码片段展示了如何定义一个结合了 BERT 和 BiLSTM 及 CRF 层的 PyTorch 模型类 `BertBiLstmCrf`[^1]。 #### 数据准备与分词 在实际应用中,需要准备好相应的语料库,并对其进行适当的预处理工作,包括但不限于清洗文本、去除噪声以及标记化等操作。特别是对于中文环境下的 NLP 任务来说,还需要考虑字符级别的切分方式。 ```python tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') def tokenize_and_preserve_labels(sentence, text_labels): tokenized_sentence = [] labels = [] for word, label in zip(sentence.split(), text_labels.split()): tokenized_word = tokenizer.tokenize(word) n_subwords = len(tokenized_word) tokenized_sentence.extend(tokenized_word) labels.extend([label] * n_subwords) return tokenized_sentence, labels ``` 上述函数实现了保持原始单词与其对应标签之间映射关系的同时完成分词的过程。 #### 训练过程概述 当一切就绪之后就可以开始训练流程了。这涉及到设置优化算法、损失函数的选择等方面的内容;同时也需要注意监控验证集上的表现以便及时调整超参数配置以获得更好的泛化效果。 ```python optimizer = AdamW(model.parameters(), lr=learning_rate) scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=warmup_steps, num_training_steps=t_total) for epoch in range(epochs): model.train() total_loss = 0 for step, batch in enumerate(train_dataloader): optimizer.zero_grad() inputs = {'input_ids': batch['input_ids'].to(device), 'attention_mask': batch['attention_mask'].to(device), 'labels': batch['labels'].to(device)} loss = model(**inputs) total_loss += loss.item() loss.backward() optimizer.step() scheduler.step() ``` 这段伪代码概括了整个训练循环的核心逻辑,其中包含了前向传播计算、反向梯度累积更新权重等一系列必要的步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值