主页 > 互联网  > 

【小羊肖恩】小羊杯Round2C+K

【小羊肖恩】小羊杯Round2C+K

题目链接: ac.nowcoder /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; }

标签:

【小羊肖恩】小羊杯Round2C+K由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【小羊肖恩】小羊杯Round2C+K