【小羊肖恩】小羊杯 Round 2 C+K

embedded/2025/3/3 18:32:25/

题目链接:https://ac.nowcoder.com/acm/contest/100672#question

C.是毛毛虫吗?

思路:

其实很简单,假设我们要满足题目所给条件,那么这个毛毛虫最坏情况下肯定是一条如下图所示的无向图

右端省略号为对称图形 ,其中红线为毛毛虫的主体

那我们可以知道,只要对于其中任意一个节点增加一个,那么就无法构成毛毛虫

再总结一下,即只要一个节点有三个子节点,且这三个子节点都含有一个子节点(不为父节点)

那么就无法构成毛毛虫

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#define ll long long
using namespace std;void solve()
{int n;cin >> n;vector<vector<int> >a(n + 1);for (int i = 1; i < n; i++) {int x, y;cin >> x >> y;a[x].push_back(y);a[y].push_back(x);}for (int i = 1; i <= n; i++){if (a[i].size() >= 3){int sum = 0;for (int j = 0; j < a[i].size(); j++){int t = a[i][j];if (a[t].size() > 1)sum++;}if (sum >= 3) {cout << "NO" << endl;return;}}}cout << "YES" << endl;
}int main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

K.友善的数

思路:

首先,只有x或y有一个为1,那么必定无法找出

那么接下来我们考虑什么情况这个数k与x,y不互质

可以显然看出,我们最小的情况肯定是 Px*Py ,其中P为构成x/y的最小质因数

那么就分两种情况

①.gcd(x,y) == 1

此时x和y互质,那么此时只能选x和y的最小质因数

②.gcd(x,y) != 1

此时x和y有着公约数,那么我们可以考虑旋转公约数的最小质因子,但是不能保证其一定比x和y的最小质因数之积小,所以还需要取min

对于如何选取x和y的质因数,我们可以想到欧拉筛,在欧拉筛中我们保证每次筛选都是最小质因数的i倍,所以我们便可以定义一个数组用于储存每个数的最小质因数,同时预处理一下

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#define ll long long
using namespace std;ll gcd(ll a,ll b)
{return !b ? a : gcd(b, a % b);
}
const int N = 2e5+1;
bool isp[N + 1];
vector<int> p;
int minp[N + 1];void els()
{memset(isp, true, sizeof isp);isp[0] = isp[1] = false;for (int i = 2; i <= N; i++){if (isp[i]) p.push_back(i), minp[i] = i;for (int j = 0; j < p.size() && p[j] * i <=N; j++){minp[p[j] * i] = p[j];isp[p[j] * i] = false;if (i % p[j] == 0) break;}}
}void solve()
{ll x, y;cin >> x >> y;if (x == 1 || y == 1){cout << -1 << endl;return;}if (gcd(x,y) == 1){cout << (ll)(minp[x]) * (ll)(minp[y]) << endl;}else{cout << min((ll)minp[gcd(x,y)], (ll)minp[x] * (ll)minp[y]) << endl;}
}int main()
{els();cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}


http://www.ppmy.cn/embedded/169688.html

相关文章

视频批量分段工具

参考原文&#xff1a;视频批量分段工具 选择视频文件 当您启动这款视频批量分段工具程序后&#xff0c;有两种便捷的方式来选择要处理的视频文件。其一&#xff0c;您可以点击程序界面中的 “文件” 菜单&#xff0c;在下拉选项里找到 “选择视频文件” 按钮并点击&#xff1b…

wordpress子分类调用父分类名称和链接的3种方法

专为导航而生&#xff0c;在wordpress模板制作过程中常常会在做breadcrumbs导航时会用到&#xff0c;子分类调用父分类的名称和链接&#xff0c;下面这段简洁的代码&#xff0c;可以完美解决这个问题。 <?php echo get_category_parents( $cat, true, &raquo; ); ?…

自然语言处理NLP深探

1. NLP 的定义、特点、具体工作、历史和流派 定义:自然语言处理(Natural Language Processing,NLP)是计算机科学与人工智能领域的一个重要分支,旨在让计算机理解、处理和生成人类自然语言,实现人与计算机之间用自然语言进行有效通信。特点 交叉性:涉及计算机科学、语言学…

AF3 pair_sequences函数解读

AlphaFold3 msa_pairing模块的pair_sequences函数的核心目标是基于 MSA(多序列比对)中的物种信息,在多条链之间建立 MSA 配对索引,从而帮助 AlphaFold3 捕捉共进化信息,提升蛋白复合物预测的准确性。函数pair_sequences 通过调用 _make_msa_df、 _create_species_dict 以…

ubuntu Linux 正确设置中文环境的方法

在安装ubuntu Linux中文环境时&#xff0c;有不少资料提到要修改一些配置文件&#xff0c;其实完全没必要&#xff0c;以下是正确安装中文环境的方法。 在新安装的ubuntu Linux的基础上&#xff0c;如下&#xff1a; 1. 安装中文语言包 # 更新软件源 sudo apt update# 安装中…

深入理解Reactor Flux的生成方法

在Reactor框架中&#xff0c;Flux 是一个非常重要的概念&#xff0c;它用于表示一个可以产生多个事件的响应式流。通过 Flux 提供的多种生成方法&#xff0c;我们可以灵活地创建各种类型的流。本文将详细介绍 Flux.generate 方法的使用&#xff0c;并通过实例帮助读者更好地理解…

前缀和算法 算法4

算法题中帮助复习的知识 vector<int > dp( n ,k); n为数组大小 ,k为初始化 哈希表unordered_map<int ,int > hash; hash.find(k)返回值是迭代器 ,找到k返回其迭代器 没找到返回hash.end() hash.count(k)返回值是数字 ,找到k返回1 ,没找到返回0. C和java中 负数…

C语言实现双向链表

1、概念 单向链表的构成使得节点的访问要按照链表的方向进行,某一单元的后继单元可以直接通过链指针(next指针)找到,但是想要找到其前驱单元,必须从链头重新开始查找。如果在节点中增加一个指针域指向其前驱节点,可以在牺牲空间代价的前提下,减少操作时间的代价。在单向…