1 条题解
-
0
自动搬运
来自洛谷,原作者为

wuhan1234
**搬运于
2025-08-24 22:42:29,当前版本为作者最后更新于2023-04-10 05:58:19,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
A 2022
采用 DP 求解。设 表示选 个数总和为 的方案数。
编写的函数如下。
int work1() { long long dp[2025][11]={0}; // dp[i][j]表示选j个数总和为i的方案数 dp[0][0]=1; int i,j,k; for (i=1;i<=2022;i++) { for (j=10;j>=1;j--) { for (k=i;k<=2022;k++) { dp[k][j]+=dp[k-i][j-1]; } } } printf("%lld\n",dp[2022][10]); }执行上面的处理函数,输出结果为:。
B 钟表
将表盘的 点(或 点)作为起点,整个表盘转一圈 度,用 个刻度线分成 格,每 格就是 度。
时钟每走 个小时,时针走 格,转 度;分针走 格,转 度(正好走一圈,相当转 度);秒针走 格,转 度(走了 圈,也相当转 度)。
时钟每走 分钟,分针走 格,转 度;时针走 格,转 度;秒针走 格,相当转了 度。
时钟每走 秒,秒针走 格,转 度;分针走 格,转 度;时针走 格,转了 度。
因此,对于任意一个时刻 ,有
时针转的度数为
分针转的度数为
秒针转的度数为
计算出各指针转的度数后,它们之间的差值就是它们的夹角。
用三重循环对每一个时刻进行枚举,找到满足要求的时刻,输出即可。
编写的函数如下。
int gcd(int a,int b) { if (a%b==0) return b; else return gcd(b,a%b) ; } int work2() { int h,m,s,x,y,z; for (h=0;h<=6;h++) for (m=0;m<60;m++) for (s=0;s<60;s++) { x = 3600*h + 60*m + s ; // 时针转的角度 y = 720*m + 12*s ; // 分针转的角度 z = 720*s ; // 秒针转的角度 int hm=x>y?x-y:y-x; hm=hm%43200; if (hm>43200-hm) // 通分后,圆盘一周360度变成 43200度(360*120) hm=43200-hm; int k = gcd(hm,120) ; int hm1=hm/k; // 时针与分针的夹角hm1/hm2 int hm2=120/k; int ms=y>z?y-z:z-y; ms=ms%43200; if (ms>43200-ms) // 通分后,圆盘一周360度变成 43200度(360*120) ms=43200-ms; k = gcd(ms,120) ; int ms1=ms/k; // 分针与秒针的夹角ms1/ms2 int ms2=120/k; if (hm1!=0 && hm1*ms2==2*ms1*hm2) { printf("%d %d %d\n",h,m,s); return; } } }执行上面的处理函数,输出结果为:。
有了上面的处理结果,提交给本题的源程序如下。
#include <stdio.h> int main() { char T; scanf("%c",&T); if (T=='A') printf("379187662194355221\n"); else if (T=='B') printf("4 48 0\n"); return 0; }
- 1
信息
- ID
- 7967
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者