ZROI 2021/8/30 考试总结

本文记录了一场算法竞赛的体验,涉及数论问题的解决,大根堆的计数策略,有向图的暴力求解尝试,以及博弈论的思考。作者在数论问题中发现等比数列的规律,通过预处理解决了问题;大根堆问题未能优化至线性复杂度,仅得到部分分数;有向图和博弈论问题则未能给出有效解决方案。文章总结了暴力分的重要性,并表达了对冷静思考的反思。
摘要由CSDN通过智能技术生成

前言

今天考试四道题的题目震撼力非常强
四道题目,题目分别是
数论,大根堆,有向图,博弈论(真直白)

T1 数论

∑ i n ∑ j p φ ( i j )    m o d    1 0 9 + 7 \sum_i^n{\sum_j^p{\varphi(i^j)}} \; mod\; 10^9+7 injpφ(ij)mod109+7

考试思路

第一眼看的时候吓死我了,还以为是什么莫反,杜教筛之类的,但是再看的时候,冷静下来,联赛怎么会考那玩意?(不过联赛也考过动态DP)
看看数据,p等于0直接预处理欧拉函数就行了
但是我好像不记得 φ ( i j ) \varphi(i^j) φ(ij) φ ( i ) \varphi(i) φ(i)有什么关系
这时候,还是打表最好用,打表发现,这是个等比数列,公比是i,化简后就是
φ ( i ) × ( i 0 + i 1 + i 2 + … … i p ) \varphi(i)\times (i^0+i^1+i^2+……i^p) φ(i)×(i0+i1+i2+ip)
右边的是一个等比数列求和,左边的可以线性筛预处理
所以答案就为
∑ i n φ ( i ) × i p − 1 i − 1    m o d    1 0 9 + 7 \sum_i^n{\varphi(i)\times {\frac{i^p-1}{i-1}}}\;mod\; 10^9+7 inφ(i)×i1ip1mod109+7
只要预处理逆元就行了,但是 i p i^p ip我并没有什么很好的思路,快速幂的话就是 O ( n l o g n ) O(nlogn) O(nlogn),A不掉
就先写了80分走了

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e7+7;
const LL mod = 1e9+7;
LL prime[N],cnt;
LL eular[N];
LL Jc[N];
LL Ny[N];
bool vis[N];
void pre(LL n)
{
	eular[1]=1;
	for(LL i=2;i<=n;i++)
	{
		if(!vis[i])
		{
			prime[cnt++]=i;
			eular[i]=i-1;
		}
		for(LL j=0;prime[j]<=n/i;j++)
		{
			LL t=prime[j]*i;
			vis[t]=1;
			if(i%prime[j]==0)
			{
				eular[t]=eular[i]*prime[j];
				break;
			}
			eular[t]=eular[i]*(prime[j]-1);
		}
	}
}

LL n,p;
LL Pow(LL a,LL b)
{
	LL res=1;
	while(b)
	{
		if(b&1) res=res*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return res%mod;
} 
LL ans=0;
void Pre(LL n)
{
	Ny[1]=1;
	for(int i=2;i<=n;i++)
	Ny[i]=(mod-mod/i)*Ny[mod%i]%mod;
}
int main()
{
	cin>>n>>p;
	pre(n);
	Pre(n);
	for(LL i=1;i<=n;i++)
	{
		LL q;
		if(i==1) q=p;
		else q=(Pow(i,p)-1)*Ny[i-1]%mod;
		ans=(ans+eular[i]*q%mod)%mod;	
	}
	printf("%lld",ans);
	return 0;
}

正解

第一次知道线性筛还能预处理 i p i^p ip
然后就没了

T2 大根堆

求1~n这n个点构成的大根堆个数,其中某些点被强制指定为叶节点

考试思路

先考虑没有强制制定时
写了个 n 2 n^2 n2的DP
F [ i ] = ∑ j i − 1 C i − 1 j F [ j ] F [ i − 1 − j ] F[i]=\sum_j^{i-1}{C_{i-1}^jF[j]F[i-1-j]} F[i]=ji1Ci1jF[j]F[i1j]
然后想写个暴力对拍一下,但是没想到这个暴力我调到最后,这两个算法的答案都不一样,我也不知道哪个对,只能写分段,最后暴力挂了
害得我压根没注意到这个DP是有规律的
F [ i ] = i ! F[i]=i! F[i]=i!
唉,最后只有20分

正解

考虑每个点能够插入的位置个数是固定的,证明略
倒着插入每个电,如果某个点不是叶子,那么插入后,他的两个儿子都能放置节点,所以总的能放的位置数加一
放入一个叶节点后,他的儿子不能放,所以总的能放的位置数减一,最后乘起来就没了

T3 有向图

写了个暴力还写挂了

T4 博弈论

想推一推性质,但是推了个寂寞,写个DP连样例都不过
直接不写了

总结

这场的暴力分打的不好,导致后半场一直不冷静,还是应该先写暴力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值