cf的一次数学场。。。
递推 C
题意:长度<=n的数只含有7或8的个数
分析:每一位都有2种可能,累加不同长度的方案数就是总方案数
组合 G
题意:将5个苹果和3个梨放进n个不同的盒子里的方案数。
分析:经典的组合题目:C(n+5-1, 5) * C(n+3-1, 3)。因为可以同一个盒子放多个苹果或梨,在n基础上多k-1个,看成每个盒子放一个。
组合 H
题意:将5个车放在n*n的棋盘上的方案数。
分析:也是经典的题目,先选行,再全排列,即C (n, 5) * A (n, 5)。
枚举 I
题意:有4种车和2*n-2个停车位,要求必须连续停n辆同种类的车,问将所有车位停满的方案数。
分析:枚举停n辆同种类车的起点,统计就好了。注意,n俩相邻的方案是3,其余是4。
数学 J
题意:问1-n里面能够被2-10全部整除的数有多少个?
分析:lcm(2, ... 10) = 2520。ans = n / lcm。
数学 K
题意:问1-n里面 能够不被[2, 10]里面任意一个数整除的数 有多少个?
分析:J题的变形,经典的容斥题目。容斥原理
import java.io.*;
import java.util.*; public class Main {
public static void main(String[] args) {
new Main ().run ();
}
void run() {
Scanner cin = new Scanner (new BufferedInputStream (System.in));
long n = cin.nextLong ();
long ans = n - n / 2 - n / 3 - n / 5 - n / 7;
ans = ans + n/(2*3) + n/(2*5) + n/(2*7) + n/(3*5) + n/(3*7) + n/(5*7);
ans = ans - n/(2*3*5) - n/(2*3*7) - n/(2*5*7) - n/(3*5*7);
ans = ans + n / (2 * 3 * 5 * 7);
System.out.println (ans);
}
}
数学 P
题意:问你n角形的面积。
分析:角度已知,只要算出蓝线占直线的比例,就能算出面积。
#include <bits/stdc++.h> const double PI = acos (-1.0); int main(void) {
int n;
double r;
scanf ("%d%lf", &n, &r);
double a = 2 * PI / n;
double ans = 0.5 * n * r * r * sin (a) * sin (a/4) / (cos (a/2) * sin (PI - a*3/4));
printf ("%.10f\n", ans); return 0;
}