2024.7.28

2024.7.28

T1

这个题赛时把 \(A\) 当成了 \(11\) ,所以就挂掉了,另外,不要使用 \(gets\) , \(getline\) , 在 \(Linux\) 评测环境下会奇怪地 \(WA\) 掉,因为 \(Linux\)\(Windows\) 环境下的换行符是不同的。

T2

根据平方差公式( \(x^2-y^2=(x+y)(x-y)\)) ,得到 \(x,y\leq n\) ,枚举 \(a+b\)\(a-b\),得到 \(O(n\log n)\) 的时间复杂度,或者对于 \(x=\frac{a+b}{2},y=\frac{a-b}{2}\),得到 \(O(n\log n)\) 的时间复杂度。

这样的时间复杂度已经足够通过本题了,但这依然不是标算

标算是什么呢?

image

扫描一下答案就出来啦!!!!!!

T3

60分做法就是直接提取 \(max\)

插句话:

for(int i=1;i<=n;++i){
	for(int j=i+1;j<=n;++j)
		a[j]=a[j]-min(a[i],a[j]);
	}
}
int sum=0;
for(int i=1;i<=n;++i){
	sum+=a[i];
}

这段代码求的是 \(max(a_1,a_2,a_3,\dots,a_n)\)

这道题只需把a[j]=a[j]-min(a[i],a[j]);改成a[j]=a[j]/gcd(a[i],a[j]);,答案改成求积即可。

为什么?因为就是对这一段的指数取 \(max\)

image

可以拿到20pts

满分十分接近,对于每一个不可走点到另一个最接近的进行 \(DP\)


后记:

关于代码为什么厌氧,是因为 \(C++\)局部变量时,\(O2\) 会给它附一个奇怪的值 (⊙o⊙)? 导致 \(RE,WA,TLE,MLE,CLE,OLE,UKE\)

lucas定理

是这样定义的:\(C_n^m\)=\(C_{n/p}^{m/p}\) * \(C_{n \mod p}^{m \mod p}%p\)

\(n \lt m\)\(C_n^m = 0\)

组合数取模的问题

  1. \(n,m\) 很大的时候,\(p \leq 10^6\)\(p为质数\) ,使用 \(lucas定理\)

  2. \(n,m \leq 10^3\) 的时候,\(p \texttt{为任意数}\) ,算杨辉三角形即可

  3. \(n,m \leq 10^6\) , \(p是约等于10^9的质数\),使用计算公式

  4. \(n \leq 10^9,m \leq 10^3\) , \(p为任意数\),经过约分(见下图)

image

image

posted @ 2024-07-28 14:49  guoguo160  阅读(12)  评论(0)    收藏  举报