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

unknown_risk
回忆是一种重逢,忘记是一种自由搬运于
2025-08-24 22:51:30,当前版本为作者最后更新于2023-10-22 10:44:47,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
一道很简单的计数题,可惜我是考场上样例二都看不懂的蒟蒻。
题意
能通过转动一个拨圈任意幅度,或者两个拨圈相同幅度,求能达到 个状态的可能正确的密码方案数。
Sol
注意到 ,且拨圈只有五个,我们可以枚举转动幅度计数,最终状态是正确答案当且仅当它能通过 个状态转移而来。
Code
#include<bits/stdc++.h> using namespace std; const int N=11,mod=10; int n,ans,dp[N][N][N][N][N]; int main() { cin>>n; for(int i=1;i<=n;i++) { int a,b,c,d,e; cin>>a>>b>>c>>d>>e; for(int j=1;j<=9;j++) { dp[(a+j)%mod][b][c][d][e]++; dp[a][(b+j)%mod][c][d][e]++; dp[a][b][(c+j)%mod][d][e]++; dp[a][b][c][(d+j)%mod][e]++; dp[a][b][c][d][(e+j)%mod]++; dp[(a+j)%mod][(b+j)%mod][c][d][e]++; dp[a][(b+j)%mod][(c+j)%mod][d][e]++; dp[a][b][(c+j)%mod][(d+j)%mod][e]++; dp[a][b][c][(d+j)%mod][(e+j)%mod]++; } } for(int i=0;i<=9;i++) for(int j=0;j<=9;j++) for(int k=0;k<=9;k++) for(int u=0;u<=9;u++) for(int v=0;v<=9;v++) if(dp[i][j][k][u][v]==n)ans++; cout<<ans; return 0; }
- 1
信息
- ID
- 9310
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者