前言

比赛网址: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}\))或者简单的容斥可得:

\[\begin{aligned}ans=\frac{2 \times 2^{\frac{n^2}{4}} + 2^{\frac{n^2}{2}} + 2^{n^2}}{4}\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 题解的更多相关文章

  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 ...

  2. YAOI Round #5 题解

    前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/13 Div.2 : http://47.110.12.131:9016/contest/12 D ...

  3. YAOI Round #3 题解

    前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/7 Div.2 : http://47.110.12.131:9016/contest/8 Div ...

  4. Codeforces Round #556 题解

    Codeforces Round #556 题解 Div.2 A Stock Arbitraging 傻逼题 Div.2 B Tiling Challenge 傻逼题 Div.1 A Prefix S ...

  5. LibreOJ β Round #2 题解

    LibreOJ β Round #2 题解 模拟只会猜题意 题目: 给定一个长为 \(n\) 的序列,有 \(m\) 次询问,每次问所有长度大于 \(x\) 的区间的元素和的最大值. \(1 \leq ...

  6. Codeforces Round #569 题解

    Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...

  7. Codeforces Round #557 题解【更完了】

    Codeforces Round #557 题解 掉分快乐 CF1161A Hide and Seek Alice和Bob在玩捉♂迷♂藏,有\(n\)个格子,Bob会检查\(k\)次,第\(i\)次检 ...

  8. CFEducational Codeforces Round 66题解报告

    CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...

  9. Google kickstart 2022 Round A题解

    Speed Typing 题意概述 给出两个字符串I和P,问能否通过删除P中若干个字符得到I?如果能的话,需要删除字符的个数是多少? 数据规模 \[1≤|I|,|P|≤10^5 \] 双指针 设置两个 ...

随机推荐

  1. Turing渲染着色器网格技术分析

    Turing渲染着色器网格技术分析 图灵体系结构通过使用 网格着色器 引入了一种新的可编程几何着色管道.新的着色器将计算编程模型引入到图形管道中,因为协同使用线程在芯片上直接生成紧凑网格( meshl ...

  2. IaaS、PaaS 和 SaaS:云服务模型概述

    IaaS.PaaS 和 SaaS:云服务模型概述 为您的组织选择合适的云服务模型,可以帮助您充分利用预算和 IT 资源. 基础设施即服务 (IaaS).平台即服务 (PaaS) 以及软件即服务 (Sa ...

  3. HTML——超链接<a>

    一.超链接的一般格式: <a href="路径" target="目标窗口的位置">链接文本或图像<a/> 1.常用参数说明: href ...

  4. 密码学系列之:feistel cipher

    密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...

  5. Python跨域问题解决集合

    Flask 安装插件 pip install flask-cors 使用 CORS函数配置全局路由 from flask_cors import * app = Flask(__name__) COR ...

  6. 【NX二次开发】通过两点创建单位向量

    源码1: //生成从起点到终点的单位向量 double douPoint_Start[3] = { 10,10,10 }; double douPoint_End[3] = { 15,16,13 }; ...

  7. sql:group by和 max

    通过group by,having,max实现查询出每组里指定列中最大的内容 例如:我需要实现的功能是 获取每个模块中点击量最大的内容(表中有许多内容,内容里) 我写的查询语句如下 查询结果如下: 然 ...

  8. 为什么选择ASP.NET Core

    什么是.NET 有一次小飞去面试,面试官上来就问了一个宏观的问题:"你觉得什么是.NET"?小飞的脑子嗡嗡的,支吾了半天,才吐了一些碎片化的词语:"跨平台.开源.微软-& ...

  9. 树莓派FRP内网穿透及自启动

    内网穿透的步骤和文件存档 实验室在远方部署了电脑主机来采集数据和图片,每次去调试会很麻烦,因而使用FRP内网穿透使得我们可以在实验室访问主机. 主要功能 实现远程可访问和开机自启FRP程序服务 安装和 ...

  10. WPF中ListView控件怎么添加新的tiem时滚动条一直在最下面

    listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1])