前言

比赛网址: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. python基础课程讲解

    day01: 编程语言的介绍: 一 1.什么是编程?(****) 两个环节: 1.把做事的思维逻辑给想清楚了 2.用计算机能听懂的语言也就是编程语言把做事的步骤给翻译下来 2.为什么要编程? 人要奴役 ...

  2. libevent中数据缓冲区buffer分析

    很多时候为了应对数据IO的"慢"或者其他原因都需要使用数据缓冲区.对于数据缓冲,我们不陌生,但是对于如何实现这个缓冲区,相信很多时候大家都没有考虑过.今天就通过分析libevent ...

  3. Go语言协程并发---管道信号量应用

    package main import ( "fmt" "math" "strconv" "time" ) /* ·10 ...

  4. java后端知识点梳理——多线程与高并发

    进程与线程 进程是一个"执行中的程序",是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体,一个进程中一般拥有多个线程. 线程和进程的区别 进程是操作系统分配资源的最小单 ...

  5. servlet、过滤器、监听器、拦截器之间的关系和区别

    一.概念 1.什么是servlet servlet是一个接口.定义了一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destr ...

  6. VNC 相关

    vncserver启动报错root A VNC server is already running as :1 [root@42 ~]# service vncserver startStarting ...

  7. 关于spooling的一些理解

    spooling做了什么 1.将独占设备(打印机)虚拟化,变成一个逻辑上的共享设备. 怎么理解?虚拟化,通俗来讲,就是让单个资源仿似变成了多个资源. 以打印机为例,没有虚拟化之前,只能有一个进程申请到 ...

  8. 十六、.net core(.NET 6)搭建基于Redis的Hangfire定时器

    搭建基于Redis的Hangfire定时器 Hangfire的定时配置信息会自动生成在指定到数据库内,包括关系型数据库或非关系型数据库内.目前为止,它在Redis.Oracle上面,可以支持最短15秒 ...

  9. MySQL的启动选项和系统变量该如何配置?

    MySQL的配置信息可以通过两种方式实现,一种是命令行形式,在启动MySQL服务时后边带上相关配置参数,此种方式会在MySQL重启后失效.另外一种是通过写入配置文件,如my.cnf,启动或者重启MyS ...

  10. 痛并快乐的YOLO初体验

    1.前言 最近因为需要研究视频的物体识别和行为识别,上网了解了一下,YOLO是目前实时视频物体识别的应用最广泛的算法. 因此,作为小白的我,也准备体验一下YOLO算法的效果. 先上网了解了一下YOLO ...