• 马蹄集OJ赛第十三次


    目录

    小码哥的抽卡之旅

    抽奖概率

    越狱

    square

    矩阵乘法

    找朋友

    赌石

    甜甜花的研究

    行列式

    饿饿!饭饭!


    小码哥的抽卡之旅


    难度:黄金
    ①时间限制:1秒
    巴占用内存:128M
    小码哥最近迷上了一款抽卡游戏。单抽出金的概率是0.6%,如果前89发都不出金,则90发必出
    金。小码哥目前存了一些抽数,想要你帮他算算他出金的概率。
    格式
    输入格式:一个整数,表示小码哥的抽数。
    输出格式:一个百分数p,表示出金的概率,保留六位小数(按所给样例。

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. int n;
    7. double x[97],ans;
    8. int main(){
    9. cin >>n;
    10. x[1]=1;
    11. for (int i = 2;i<=n;i++)
    12. x[i]=x[i-1]*0.994;
    13. for (int i=1;i<=n;i++)
    14. ans+=x[i]*0.006;
    15. ans*=100;
    16. if(n==90)
    17. ans=100;
    18. printf("%.6f\%\n",ans);
    19. return 0;
    20. }

    抽奖概率


    难度:黄金
    ○时间限制:1秒
    四占用内存:128M
    小码哥正在进行抽奖,箱子里有一红一白两小球,每次摸出一个球,摸到红球中奖,如果中奖,
    就不再继续抽奖;如果未中奖(摸到白球),则往箱子里补充一个白球(摸出的白球不放回),继
    续抽奖,直到中奖,或者达到最大抽奖次数。
    假设至多能抽奖M次,求当停止抽奖时,(中奖球数/摸出总球数)的期望。
    格式
    输入格式:一行,一个整数M。
    输出格式:保留到小数后六位。

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. int n;
    7. double p,ans;
    8. int main(){
    9. cin >>n;
    10. p=1;
    11. for (int i=1;i <= n;++i){
    12. p /=2;
    13. ans += p / i;
    14. }
    15. printf("%.6lf\n",ans);
    16. return 0;
    17. }

    越狱


    难度:钻石
    ①时间限制:1秒
    巴占用内存:128M
    监狱有个房间,每个房间关押一个犯人,有m种宗教,每个犯人会信仰其中一种。如果相邻房
    间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。
    答案对1007取模。
    格式
    输入格式:输入只有一行两个整数,分别代表宗教数m和房间数n。
    输出格式:输出一行一个整数代表答案。

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. #define int long long
    7. const int mod = 1007;
    8. int m,n,ans;
    9. long long binpow(long long a,long long b,long long m){
    10. a%=m;
    11. long long res = 1;
    12. while (b > 0){
    13. if (b & 1)
    14. res=res * a % m;
    15. a=a*a%m;
    16. b>>=1;
    17. }
    18. return res;
    19. }
    20. signed main() {
    21. cin >> m >> n;
    22. ans = binpow(m, n, mod) - m * binpow(m - 1, n - 1, mod) % mod;
    23. ans = (ans % mod + mod) % mod;
    24. cout << ans << endl;
    25. return 0;
    26. }

    square


    难度:钻石©
    时间限制:3秒
    巴占用内存:128M
    在一个×的矩阵上,小码哥在左下角的顶点出现了,他只能沿着路径向上或者向右走,他的目标
    是“蠕动”到右上角的顶点,问他有多少路径可以选择。嗯,这个、这个、这个似乎地球人都知道怎
    么做,但是请注意,我有个条件没给呢!m和现在的最大范围是500阳,这可怎么办?仔细想
    想吧。
    格式
    输入格式:只有一行,包含两个整数m和n,其均不小于4,上限均为50000。
    输出格式:由于最后的答案数目过大,所以只检查后100位,输出时每行十个数字,没空格
    间隔,共十行,如果答案位数没超过100位,则需要在空位上补0。

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. const int N = 1e5 + 7;//n+m
    7. const int N2 = 107;
    8. int n,m;
    9. int fac[N],a[N2] = {1},c[N2];
    10. void clear(int a[]) {//字符串清0
    11. for (int i = 0; i < N2; i++)
    12. a[i] = 0;
    13. }
    14. void mul_short(int a[],int b,int c[]) {//a*b=c,高精度*单精度
    15. clear(c);
    16. for (int i = 0; i < N2; i++) {
    17. c[i] += a[i] * b;
    18. if (c[i] >= 10) {
    19. c[i + 1] += c[i] / 10;
    20. c[i] %= 10;
    21. }
    22. }
    23. }
    24. int main(){
    25. cin >>m >>n;
    26. n =n + m;
    27. for (int i=n-m+1;i<=n;i++){
    28. int tmp =i;
    29. for (int j=2;j*j<=tmp;j++)
    30. while (tmp % j==0) {
    31. fac[j]++;
    32. tmp /= j;
    33. }
    34. if (tmp > 1)
    35. fac [tmp]++;
    36. }
    37. for (int i=1;i<=m;i++) {
    38. int tmp = i;
    39. for (int j = 2; j * j <= tmp; j++)
    40. while (tmp % j == 0) {
    41. fac[j]--;
    42. tmp /= j;
    43. }
    44. if (tmp > 1)
    45. fac[tmp]--;
    46. }
    47. for (int i = 2; i < N; i++)
    48. while (fac[i]--) {
    49. mul_short(a, i, c);
    50. memcpy(a, c, sizeof(c));
    51. }
    52. for (int i = 99; i >= 0;i--)
    53. if (i % 10 == 0)
    54. cout << a[i] << endl;
    55. else
    56. cout << a[i];
    57. return 0;
    58. }

    矩阵乘法


    难度:黄金
    0时间限制:5秒
    巴占用内存:128M
    输入两个矩阵,第一个矩阵尺寸为l*m,第二个矩阵尺寸为m*n,请你输出将这两个矩阵相
    乘后的结果矩阵。
    格式
    输入格式:第一行输入三个整数l,m和n;
    接下来行,每行m个元素,表示第一个矩阵;
    再接下来m行,每行n个元素,表示第二个矩阵。
    输出格式:输出l行,每行个元素,表示结果矩阵。

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. int l,m,n,a[1010][1010],b[1010][1010];
    7. int main() {
    8. cin >> l >> m >> n;
    9. for (int i = 1; i <= l; i++) {
    10. for (int j = 1; j <= m; j++) {
    11. cin >> a[i][j];
    12. }
    13. }
    14. for (int i = 1; i <= m; i++) {
    15. for (int j = 1; j <= n; j++) {
    16. cin >> b[i][j];
    17. }
    18. }
    19. for (int i = 1; i <= l; i++) {
    20. for (int j = 1; j <= n; j++) {
    21. int x = 0;
    22. for (int k = 1; k <= m; k++) {
    23. x += a[i][k] * b[k][j];
    24. }
    25. cout << x << " ";
    26. }
    27. cout << endl;
    28. }
    29. return 0;
    30. }

    找朋友


    难度:黄金
    0时间限制:5秒
    巴占用内存:128M
    将个人分成组,每组至少一人,在比赛结束时,同一组的人两两之间都会成为朋友,不同分
    组的分组方案得到的朋友对数不同。你的任务是求出最小和最大的朋友对数。
    格式
    输入格式:两个整数n、m。
    输出格式:两个整数表示答案。
    样例1
    输入:51
    复制
    输出:1010
    复制

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. #define int long long
    7. int n,m,maxn,minn,tmp,tmp2;
    8. signed main(){
    9. cin >>n >>m;
    10. tmp =n-(m-1);
    11. maxn = tmp * (tmp-1)/2;
    12. tmp = n / m,tmp2 =n % m;
    13. minn = (tmp* (tmp- 1))/2 *(m- tmp2)+(tmp* (tmp+ 1))/2* tmp2;
    14. cout <" "<
    15. return 0;
    16. }

    赌石


    难度:黄金
    ①时间限制:1秒
    巴占用内存:128M
    富饶的璃月街道上有一家石料店,店主小码哥是个精明的商人,为了使他的赌石生意更加红火,他
    根据赌徒的心理设计了一个有趣的买卖规则:他在店铺的两边放了个小桶,一个桶里有个红
    球,另一个有m个蓝球。每一批2个璞石与这些球一一对应,对每个来买璞石的客户,小码哥都
    会让他们在原地闭眼旋转数圈后走向一个小桶,若拿到蓝球则可免费获得一块石头,但若拿到红球
    则需要付出两倍的价钱。
    假设每个人每次拿到蓝球和红球的概率相同,现在请你求出一个桶里没球而另一个桶里还剩两个球
    的概率,精确到小数点后四位。
    格式
    输入格式:输入一个正整数代表这批璞石的个数(不大于2500,且保证为偶数)。
    输出格式:输出一个四位小数代表所求答案。

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. int n;
    7. double ans;
    8. int main(){
    9. cin >>n;
    10. n/=2;
    11. ans=1.0;
    12. for (int i=1;i
    13. ans *= (double)(n -1+i)/(i*4);
    14. printf("%.4lf\n",1- ans);
    15. return 0;
    16. }

    甜甜花的研究


    难度:黄金○时间限制:1秒
    巴占用内存:128M
    小码哥酷爱研究植物,他对甜甜花的研究无人能及,可他仍然在不断研究着。现在小码哥有粒
    甜甜花的种子,每一粒种子都能长出不同的甜甜花,由于种子实在太多,小码哥一个人实在无法照
    料,于是他雇佣了m位种植能手,第2个人能照料α,株甜甜花,请问小码哥有多少种分配方式
    将这些种子分配出去?
    格式
    输入格式:输入共两行,第一行输入用空格隔开的两个正整数n,m;
    第二行输入m个正整数,分别代表a,。
    输出格式:输出一个整数表示方法个数:
    由于结果可能很大,须将结果对12520取模。

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. long long n,m,num,ans = 1;
    7. long long a[10007][107];
    8. int main(){
    9. cin >>n >>m;
    10. a[0][0]=1;
    11. for(int i=1;i<=10000;i++)
    12. for (int j=0;j<=100;j++)
    13. a[i][j]=(a[i-1][j-1]+a[i-1][j])%12520;
    14. for (int i=1;i<=m;i++) {
    15. cin >> num;
    16. ans = ans * a[n][num] % 12520;
    17. n -= num;
    18. }
    19. cout <
    20. return 0;
    21. }

    行列式


    难度:黄金
    ①时间限制:1秒
    巴占用内存:128M
    给出矩阵,求其行列式。
    格式
    输入格式:第一行输入T表示数据组数;
    对于每组数据,第一行输入n表示边长。接下来n行,每行输入n个整数,代
    表矩阵的元素。
    输出格式:对于每组数据,输出矩阵的行列式,答案请对0x1f1f1f1f取模。
    样例1
    输入:3
    复制
    3

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. #define int long long
    7. const int mod = 0x1f1f1f1f;
    8. int T,n,a[10][10];
    9. int sol(){
    10. int res =1,w=1;
    11. for (int i=1;i<=n;i++)
    12. for (int j=i+1;j <=n;++j) {
    13. while (a[i][i]) {
    14. int di = a[j][i] / a[i][i];
    15. for (int k = i; k <= n; ++k) {
    16. a[j][k] = (a[j][k] - di * a[i][k] % mod + mod) % mod;
    17. }
    18. swap(a[i], a[j]);
    19. w = -w;
    20. }
    21. swap(a[i], a[j]);
    22. w = -w;
    23. }
    24. for (int i=1;i<=n;i++)
    25. res = a[i][i]*res% mod;
    26. res = w *res;
    27. return (res+ mod)%mod;
    28. }
    29. signed main(){
    30. cin >>T;
    31. while (T--){
    32. cin >>n;
    33. for (int i=1;i <= n;++i)
    34. for (int j=1;j <= n;++j)
    35. cin >>a[i][j];
    36. cout <<sol()<
    37. }
    38. return 0;
    39. }

    饿饿!饭饭!


    难度:黄金
    0时间限制:1秒
    巴占用内存:128M
    嗯哼,小码哥在新的一年里不会忘记身为干饭人的初心!众所周知,小码哥非常不喜欢一直吃同样
    的东西,但由于理想与现实的差距,食堂在这天里只会供应k种餐食。
    在一天吃3餐的情况下,前w天一共w×3顿饭小码哥不希望有任何一顿重复。现在请问食堂有
    多少种方案可以满足超级可爱乖巧的小码哥的需要。
    格式
    输入格式:一行,三个整数n,k,w表示n天内食堂只会供应k种餐食,w的意义详见
    题面。
    输出格式:输出一行一个数,表示满足小码哥需要的方案数。

    1. //
    2. // Created by abner on 2023/10/25.
    3. //
    4. #include
    5. using namespace std;
    6. int main(){
    7. int n,k,w,ans = 1;
    8. cin >>n >>k >>w;
    9. if(k<3*w) {
    10. cout << 0;
    11. }else{
    12. for (int i=0;i<=3 *w-1;i++)
    13. ans*= k-i;
    14. cout <
    15. }
    16. return 0;
    17. }

  • 相关阅读:
    React 自定义hooks最佳实践
    计算机设计大赛 深度学习的智能中文对话问答机器人
    1080 Graduate Admission
    力扣(LeetCode)33. 搜索旋转排序数组(C++)
    jupyter notebook连接不上内核
    WebMagic抓取医院科室,医生信息实战及踩坑
    如何从 Ubuntu 卸载 Redis
    干货!手把手教你穿透内网
    C++20:换了“心“的auto关键字
    1分钟精准预测未来10天天气,谷歌开源GraphCast
  • 原文地址:https://blog.csdn.net/m0_62574889/article/details/134031278