标签:Onsite Weihai int LL 碰撞 180 2021 节点 二叉树
比赛链接:
https://codeforces.com/gym/103428
A. Goodbye, Ziyin!
题目大意:
\(n - 1\) 条边连接 \(n\) 个点,但是不知道根节点是哪个,判断有多少个节点作为根节点时,树是二叉树。
思路:
当某个节点的度等于 3 的时候,它肯定不能作为根节点。
当某个节点的度大于 3 的时候,不论如何都不可能形成二叉树,即没有一个节点能作为根节点。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int a, b, e[N], ans, n;
int main(){
cin >> n;
for (int i = 1; i <= n - 1; ++ i){
scanf("%d%d", &a, &b);
e[a]++;
e[b]++;
}
for (int i = 1; i <= n; ++ i){
if (e[i] > 3){
cout << "0\n";
return 0;
}
if (e[i] <= 2) ans++;
}
cout << ans << "\n";
return 0;
}
J. Circular Billiard Table
题目大意:
圆形桌面,球从边缘上某一个点以 \(\frac{a}{b}\) 这个角度入射,当球碰到桌面时,以对称的角度弹回,判断球碰撞多少次后第一次回到入射点,若不能回去,则输出 -1。
思路:
设碰撞了 \(n\) 次,总共走了 \(k\) 圈。
可以得到公式,\(n * 2 * \alpha == k * 360\),答案就是 \(n - 1\),\(n = \frac{k * 180 * b}{a}\),又因为求的是第一次回到起点的碰撞次数,所以将 180 * \(b\) 和 \(a\) 进行一个约分,再令 \(k = a\),就解出答案了。
代码:
#include <bits/stdc++.h>
using namespace std;
#define LL long long
LL T, a, b;
void solve(){
scanf("%lld%lld", &a, &b);
LL t = __gcd(a, 180 * b);
cout << 180 * b / t - 1 << "\n";
}
int main(){
cin >> T;
while (T--)
solve();
return 0;
}
标签:Onsite,Weihai,int,LL,碰撞,180,2021,节点,二叉树 来源: https://www.cnblogs.com/Hamine/p/16029602.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。