YAOI Round #1 题解
前言
比赛网址:http://47.110.12.131:9016/contest/3
总体来说,这次比赛是有一定区分度的, \(\text{ACM}\) 赛制也挺有意思的。
题解
A. 云之彼端,约定的地方
考点:
无(签到题)
解法:
本题是拓扑学中的欧拉公式的结论题。
我们发现 \(V=E-F+2\) ,于是便得到了答案。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int e,f;
scanf("%d%d",&e,&f);
printf("%d",e-f+2);
return 0;
}
B. 秒速 5 厘米
考点:
拓展欧几里得,裴蜀定理,简单数论/构造。
由于近年来考试加强了对数论的考察,今年更是考了一道构造题,故出此题来考考大家。
解法:
要使所有的数清零,也就是要使方程 \(len_1 \times x + len_2 \times y + len_3 \times z + X = 0\) 这个方程一定有解。
于是联想到裴蜀定理: \(ax+by=c\) 有解当且仅当 \(\gcd(x,y)|c\) 。
故我们知道当 \(\gcd(x,y)=1\) 时,这个方程一定有解。
所以我们考虑第一次操作修改区间 \([1,n]\) ,第二次修改区间 \([1,n-1]\) ,第三次修改 \(n\)。
由于 \(n\) 和 \(n-1\) 互质,所以一定存在方法使前两次之和加上原数等于 \(0\) ,而最后一次操作又能使最后一个数变成 \(0\) 。
具体构造方案就变成了求方程 \(nx + (n-1)y = C\) 的任意一组解。
而这不管是交给小学奥数还是交给拓展欧几里得都是可以的。
这题的构造其实不难想到,当然观察样例也可以发现,可以说观察样例是极其重要的能力。
代码: (来自 liyiming ,出题人是用拓欧写的,放这个比较友好。)
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
cout << 1 << " " << n - 1 << endl;
cout << a[1] * (n - 1);
for (int i = 2; i <= n - 1; i++) cout << " " << a[i] * (n - 1);
cout << endl;
cout << 1 << " " << n << endl;
for (int i = 1; i <= n - 1; i++) cout << -a[i] * n << " ";
cout << 0 << endl;
cout << n << " " << n << endl;
cout << -a[n];
cout << endl;
return 0;
}
C. 追逐繁星的孩子
考点:
树论,树的遍历,概率的基本计算。
解法:
对于题目中给的这棵树,从 \(1\) 号节点开始进行一次 \(\text{dfs}\) ,并在过程中计算经过该点的概率即可。
当然,如果当前概率已经不合法,则可以剪枝优化。
本题的难度明显小于 B 题, AC 人数不符合预期……
代码:
#include <bits/stdc++.h>
#define Re register
using namespace std;
const int maxn=500005;
vector<int> T[maxn],E[maxn];
int n,q,cnt;
void dfs(int x,int fa,long double p)
{
if(p*100<q) return;
cnt++;
for(Re int i=0;i<T[x].size();i++)
{
if(T[x][i]==fa) continue;
dfs(T[x][i],x,p*E[x][i]/100);
}
}
int main()
{
scanf("%d%d",&n,&q);
for(Re int i=1;i<n;i++)
{
int u,v,p;
scanf("%d%d%d",&u,&v,&p);
T[u].push_back(v);
T[v].push_back(u);
E[u].push_back(p);
E[v].push_back(p);
}
dfs(1,1,1.0);
printf("%d",cnt);
return 0;
}
D. 言叶之庭
代码:
int n;
cin>>n;
for (int i = n - 1; i >= 0; i--)
{
f[i] = f[i+1] + (double)n / ((double)n - i);
g[i] = g[i+1] + (double)i / ((double)n - i) * f[i]+ f[i+1] + (double)n / ((double)n - i);
}
printf("%.2lf",g[0]);
考点:
期望相关知识。
可以说期望是一个大难点,如何逾越它是个重要的问题。
题解:
本题为 Luogu P4550 原题……
E. 你的名字
考点:
组合数学,计数问题。
计数问题是福建省选的黄金考点,六题能出四道计数。
题解:
使用 Burnside 引理(\(\begin{aligned}cnt = \frac{1}{|G|}\sum\limits \chi (x)\end{aligned}\))或者简单的容斥可得:
\]
而 \(2\) 的那么多次方直接用快速幂计算即可。
(考虑利用费马小定理,我们可以进一步优化,这里就不介绍了,可以看下面代码自行理解……)
代码:
cout<<(2*1ll*qpow(2,ksc(n/2,n/2,mod-1))+qpow(2,ksc(n/2,n,mod-1))+qpow(2,ksc(n,n,mod-1)))%mod*1ll*inv4%mod;
F. 天气之子
考点:
计数问题,树论。
树论是 noip / CSP 中最重要的考点之一。
题解:
这种方法叫做 贡献 法,考虑一个连通块在哪些 \([l,r]\) 中出现过。
我们需要取其中一个点作为这个连通块的代表,不妨就取深度最浅的那个点。
于是我们枚举每个结点作为连通块的最浅结点,显然它能作为最浅结点当且仅当它的父节点没有被取到,当它的父节点被取到时,它就不是最浅节点,也可以认为这个连通块它不存在。
然后就做完了本题……
代码:
u64 ans = 0;
for (int i = 2; i <= n; i++)
{
if (fat[i] < i)
{
ans += (i - fat[i]) * 1ll * (n - i + 1);
}
else
{
ans += (fat[i] - i) * 1ll * i ;
}
}
YAOI Round #1 题解的更多相关文章
- YAOI Round #7 题解
前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/16 Div.2 : http://47.110.12.131:9016/contest/15 D ...
- YAOI Round #5 题解
前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/13 Div.2 : http://47.110.12.131:9016/contest/12 D ...
- YAOI Round #3 题解
前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/7 Div.2 : http://47.110.12.131:9016/contest/8 Div ...
- Codeforces Round #556 题解
Codeforces Round #556 题解 Div.2 A Stock Arbitraging 傻逼题 Div.2 B Tiling Challenge 傻逼题 Div.1 A Prefix S ...
- LibreOJ β Round #2 题解
LibreOJ β Round #2 题解 模拟只会猜题意 题目: 给定一个长为 \(n\) 的序列,有 \(m\) 次询问,每次问所有长度大于 \(x\) 的区间的元素和的最大值. \(1 \leq ...
- Codeforces Round #569 题解
Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...
- Codeforces Round #557 题解【更完了】
Codeforces Round #557 题解 掉分快乐 CF1161A Hide and Seek Alice和Bob在玩捉♂迷♂藏,有\(n\)个格子,Bob会检查\(k\)次,第\(i\)次检 ...
- CFEducational Codeforces Round 66题解报告
CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...
- Google kickstart 2022 Round A题解
Speed Typing 题意概述 给出两个字符串I和P,问能否通过删除P中若干个字符得到I?如果能的话,需要删除字符的个数是多少? 数据规模 \[1≤|I|,|P|≤10^5 \] 双指针 设置两个 ...
随机推荐
- Turing渲染着色器网格技术分析
Turing渲染着色器网格技术分析 图灵体系结构通过使用 网格着色器 引入了一种新的可编程几何着色管道.新的着色器将计算编程模型引入到图形管道中,因为协同使用线程在芯片上直接生成紧凑网格( meshl ...
- IaaS、PaaS 和 SaaS:云服务模型概述
IaaS.PaaS 和 SaaS:云服务模型概述 为您的组织选择合适的云服务模型,可以帮助您充分利用预算和 IT 资源. 基础设施即服务 (IaaS).平台即服务 (PaaS) 以及软件即服务 (Sa ...
- HTML——超链接<a>
一.超链接的一般格式: <a href="路径" target="目标窗口的位置">链接文本或图像<a/> 1.常用参数说明: href ...
- 密码学系列之:feistel cipher
密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...
- Python跨域问题解决集合
Flask 安装插件 pip install flask-cors 使用 CORS函数配置全局路由 from flask_cors import * app = Flask(__name__) COR ...
- 【NX二次开发】通过两点创建单位向量
源码1: //生成从起点到终点的单位向量 double douPoint_Start[3] = { 10,10,10 }; double douPoint_End[3] = { 15,16,13 }; ...
- sql:group by和 max
通过group by,having,max实现查询出每组里指定列中最大的内容 例如:我需要实现的功能是 获取每个模块中点击量最大的内容(表中有许多内容,内容里) 我写的查询语句如下 查询结果如下: 然 ...
- 为什么选择ASP.NET Core
什么是.NET 有一次小飞去面试,面试官上来就问了一个宏观的问题:"你觉得什么是.NET"?小飞的脑子嗡嗡的,支吾了半天,才吐了一些碎片化的词语:"跨平台.开源.微软-& ...
- 树莓派FRP内网穿透及自启动
内网穿透的步骤和文件存档 实验室在远方部署了电脑主机来采集数据和图片,每次去调试会很麻烦,因而使用FRP内网穿透使得我们可以在实验室访问主机. 主要功能 实现远程可访问和开机自启FRP程序服务 安装和 ...
- WPF中ListView控件怎么添加新的tiem时滚动条一直在最下面
listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1])