4 条题解
-
1
作为NOIP复赛这题太客气了。不需要动态规划,帖个o(m/n)(可以这么写么?)的算法。
#include <bits/stdc++.h> using namespace std; __int128 f[31] = {1}; __int128 step_combination(int a, int b) { return f[a + b] / f[a] / f[b]; } int main() { int n, m; cin >> n >> m; __int128 fratorial = 1; for (int i = 1; i <= 30; i++) fratorial *= i, f[i] = fratorial; __int128 res = 0; if (m % 2 == 0) res = step_combination(m / 2, m / 2); for (int i = n; i <= m; i += n) { if ((m - i) & 1) continue; res += 2 * step_combination( (m - i) / 2, i + (m - i) / 2); } // print __int128 vector<int> res_digits; while (res > 0) { res_digits.push_back(res % 10); res /= 10; } if (res_digits.size() == 0) res_digits.push_back(0); for (int i = res_digits.size() - 1; i >= 0; i--) cout << res_digits[i]; }
-
-2
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
-
-3
基本的dp,设f[i][j]为第i次传球传到位置j的方案数 每次可从左边或者右边传来,处理一下两个左右端点即可 #include<bits/stdc++.h> using namespace std; int n,m,f[35][35];//f[i][j]为第i次传球传到位置j的方案数 int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m; f[0][1]=1; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { if(j==1)//传到位置1只能是位置n或者位置2传来 { f[i][j]=f[i-1][n]+f[i-1][2]; } if(j>1&&j<n)//中间位置就是左右传来即可 { f[i][j]=f[i-1][j-1]+f[i-1][j+1]; } if(j==n) { f[i][j]=f[i-1][1]+f[i-1][n-1]; } } } cout<<f[m][1]; return 0; }
- 1
信息
- ID
- 797
- 时间
- 1000ms
- 内存
- 50MiB
- 难度
- 1
- 标签
- 递交数
- 90
- 已通过
- 63
- 上传者