牛客小白月赛75题解

news2024/10/7 0:57:43

C 豆子

构造题

由构造公式知 第n级好豆子 = 第n-1级坏豆子^1

所以只需要构造一个豆子结构就行

第 i 级豆子 = 第 i 级豆子 第 i 级豆子 第 i 级豆子 第 i 级豆子 ^ 1 第i级豆子=\begin{aligned} 第i级豆子 && 第i级豆子 \\ 第i级豆子 && 第i级豆子 \verb|^| 1 \end{aligned} i级豆子=i级豆子i级豆子i级豆子i级豆子^1

预处理构造一下输出就行

#include<iostream>
using namespace std;
bool s[1100][1100];
bool d[6][6];
void init(int n)
{
    s[1][1] = 1;
    for(int i=2;i<=n;++i)
    {
        int x = (1<<(i-2));
        for(int j=1;j<=x;++j)
            for(int k=1;k<=x;++k)
            {
                s[j+x][k] = s[j][k];
                s[j][k+x] = s[j][k];
                s[j+x][k+x] = s[j][k]^1;
            }
    }
    for(int i=3;i<6;++i)
        for(int j=3;j<6;++j)
            d[i][j] = 1;
}
void print(int x,int y,int u)
{
    for(int i=0;i<6;++i)
    {
        for(int j=1;j<=y;++j)
            for(int k=0;k<6;++k)
            {
                if((s[x][j]^u^d[i][k]))
                    cout<<"*";
                else
                    cout<<".";
            }
        cout<<endl;
    }
}
int main()
{
    int n;cin>>n;
    init(n);
    int d = (1<<(n-1));
    for(int i=1;i<=d;++i)
    {
        print(i,d,n&1^1);
    }
    return 0;
}

D 矩阵

直接两层bfs就行

#include<bits/stdc++.h>
using namespace std;
int dp[1010][1010][2];
int dr[] = {-1,0,1,0,0,1,0,-1};
queue<vector<int>>q;
string arr[1010];
int n,m;
void bfs(int x,int y,char f)
{
    memset(dp,0x3f,sizeof(dp));   
    dp[x][y][f-'0'] = 0;
    q.push({x,y,f-'0'});
    while(!q.empty())
    {
        auto u = q.front();
        q.pop();
        for(int i=0;i<4;++i)
        {
            int nx = u[0] + dr[i<<1];
            int ny = u[1] + dr[i<<1|1];
            int nf = u[2]^1;
            if(nx>=0 && nx<n && ny>=0 && ny<m)
            {
                int cost = 1;
                if(arr[nx][ny]-'0' != nf)
                    cost = 2;
                if(dp[nx][ny][nf]>dp[u[0]][u[1]][u[2]]+cost)
                {
                    q.push({nx,ny,nf});
                    dp[nx][ny][nf]=dp[u[0]][u[1]][u[2]]+cost;
                }
            }
        }
    }
    
}

int main()
{
    cin>>n>>m;
    for(int i=0;i<n;++i)
        cin>>arr[i];
    bfs(0,0,arr[0][0]);
    cout<<min(dp[n-1][m-1][0],dp[n-1][m-1][1])<<endl;
}

/*
dp大概率会卡这组数据
2 10
1111101010
0101011111
*/

E 数数

由于数字不大,直接dp

用dp[i][j]表示长度为i时前缀和为j的方案数,显然只有 i ∣ j i|j ij(j被i整除)时才存在方案数

可以推出

d p [ i ] [ j ] = {      0   , j   m o d   i ≠ 0 ∑ k = j − m j d p [ i − 1 ] [ k ] , j   m o d   i = 0 dp[i][j] =\begin{cases} \ \ \ \ 0\ & , j\ mod\ i \ne 0 \\ \sum\limits^{j}_{k = j-m}dp[i-1][k] &, j\ mod\ i=0 \end{cases} dp[i][j]=     0 k=jmjdp[i1][k],j mod i=0,j mod i=0

这么遍历一次复杂度为 O ( n m l n ( n m ) ) O(nmln(nm)) O(nmln(nm)),由于dp中有很多0,所以可以优化一下

∑ k = j − m j d p [ i − 1 ] [ k ] = ∑ k = j − m + 1 i − 1 j i − 1 d p [ i − 1 ] [ k ∗ ( i − 1 ) ] \sum\limits^{j}_{k = j-m}dp[i-1][k] = \sum \limits^{\frac{j}{i-1}}_{k=\frac{j-m+1}{i-1}}dp[i-1][k*(i-1)] k=jmjdp[i1][k]=k=i1jm+1i1jdp[i1][k(i1)]

那么复杂度就变成了 O ( n l n ( n m ) l n ( m ) ) O(nln(nm)ln(m)) O(nln(nm)ln(m))

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9+7;

ll dp[6000000];
int main()
{
    int n,m;cin>>n>>m;
    for(int j=1;j<=m;++j)
        dp[j] = 1;
    for(int i=2;i<=n;++i)
    {
        for(int j=i*m;j>=i;j-=i)
        {
            dp[j] = 0;
            for(int k = j/(i-1)*(i-1);k>=max(0,j-m);k-=i-1)
                dp[j] = (dp[j]+dp[k])%mod;
        }
    }
    int ans = 0;
    for(int i=n;i<=n*m;i+=n)
        ans = (ans+dp[i])%mod;
    cout<<ans<<endl;
} 

F 打牌

请添加图片描述
直接大力出奇迹,乱搞得了

通过阅读题目

而阿宁在手上有两张相同的牌,第三张不同的牌时,阿宁在相同的牌中等概率随机挑一张交给下家。其它情况阿宁也是等概率随机挑选。

分析会发现阿宁的行为是确定的。即如果此时没有人win,阿宁就会把手中最多的牌发出去。所以在没有剪枝的情况下复杂度应该为 O ( 4 n ) O(4^n) O(4n)

说实话这游戏想长时间不赢其实很难的,阿宁的操作保证在多轮操作后他手上至少会有两种手牌,所以说阿宁一直处于听牌的状态,“只要能拿到那张牌……”“不好意思,和!”,

然后考虑如果其中一个人有三张的情况,假设为aaa,另外两人就是bbc,ccb。如果aaa是阿宁上家,阿宁就赢了。

下家(A)为aaa的时候,此时

  • 阿宁:bbc

  • A:aaa

  • B: ccb

阿宁打b,A打a,如果B不打b就赢了,因此想要游戏继续下去就得打b,因此就变成

  • 阿宁:bbc

  • A:aab

  • B: cca

考虑大伙都有两张牌的情况,会发现b手上至少存在一张能让阿宁赢的牌,阿宁打出去的牌必然是a需要的牌,阿宁手上有的牌ab都有(都可以用反证法证明)。用字母表示当前情况

  • 阿宁:aab

  • A:bbc/cca

  • B: cca/bbc

第一种情况{aab,cca,bbc}:

只有一种打法能让游戏继续下去,那就是阿宁打出A,A打出c,B打出a,此时会变成{aab,abb,ccc}情况。根据上面的分析,此时阿宁必赢

第二种情况{aab,cca,bbc}:

阿宁打出a,B为了阿宁不赢得打出b,A为了B不赢得打出c,此时变成{bba,aac,ccb}变成了必赢态

分析了一大轮,就会发现,在有限步内必有人会赢,而且这个有限步甚至不会超过5步。

所以这题直接暴力dfs就完事了,甚至不用剪枝。乱搞就行了。

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const ll mod = 1e9+7;
ll sp[3][3];
ll now[3][3];
map<char,int>mp;
ll qpow(ll a,ll b)
{
    ll ret = 1;
    while(b)
    {
        if(b&1) ret = ret*a%mod;
        a = a*a%mod;
        b>>=1;
    }
    return ret;
}
ll dfs(int n)
{
    for(int i=0;i<3;++i)
        if(sp[i][0]*sp[i][1]*sp[i][2])
            return i==0;
    if(!n)return 0;
    ll ret = 0;
    int mx = 0;
    if(sp[0][1]>sp[0][mx]) mx = 1;
    if(sp[0][2]>sp[0][mx]) mx = 2;
    for(int i=0;i<3;++i)
    {
        if(!sp[1][i])continue;
        for(int j=0;j<3;++j)
        {
            if(!sp[2][j])continue;
            ll p = 1ll*sp[1][i]*sp[2][j]*qpow(9,mod-2)%mod;
            sp[0][mx]--;sp[1][mx]++;
            sp[1][i]--;sp[2][i]++;
            sp[2][j]--;sp[0][j]++;
            ret = (ret+dfs(n-1)*p%mod)%mod;
            sp[0][mx]++;sp[1][mx]--;
            sp[1][i]++;sp[2][i]--;
            sp[2][j]++;sp[0][j]--;
        }
    }
    return ret;
}
int main()
{
    mp['w'] = 0;mp['i'] = 1;mp['n'] = 2;
    int n;cin>>n;
    for(int i=0;i<3;++i)
        for(int j=0;j<3;++j)
        {
            char c;cin>>c;
            sp[i][mp[c]]++;
        }
    ll ans = dfs(n);
    cout<<ans<<endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/771333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

研究IOT,发现硬件和软件的结合才是解决方案,IOT的软件服务可以通过售卖硬件一起捆绑销售。而单纯做云服务比较难。

1&#xff0c;研究4G网卡&#xff0c;调研到DTU 关于DTU&#xff1a; DTU &#xff08;Data Transfer Unit&#xff09;是一种常见的的物联网通信终端产品&#xff0c;起到网关的作用&#xff0c;它一边通过串口或无线技术连接各种传感器、控制器、执行器等&#xff0c;另一边…

【Spring Boot学习一】创建项目 Spring Boot的配置文件

目录 一、安装插件 二、创建Spring Boot项目 1、创建项目 1.1 使用IDEA创建 1.2 网页版本创建 2、项目目录介绍与运行 三、Sping Boot的配置文件&#xff08;重点&#xff09; &#x1f337;1、.properties配置文件 &#xff08;1&#xff09;基础语法&#xff1a;Key …

【C++】将类对象转换成基本数据类型

2023年7月19日&#xff0c;周三晚上&#xff1a; 今天晚上看源码的时候&#xff0c;突然在某个类里面看到了“operator bool() const;”&#xff0c;我完全想不起来这是啥意思了&#xff0c;于是今晚重新学习了一下 目录 类型转换函数的定义类型转换函数的作用 类型转换函数的…

坐标系变换的坑

坐标系变换的坑 坐标系变换本来是很简单的事情&#xff0c;公式也很简单。但是卡了我很多天&#xff0c;原因是&#xff1a;两个坐标系的位姿&#xff0c;虽然都是右手系&#xff0c;但我的在顺时针旋转是yaw角是递增的&#xff0c;同事发给我的却是逆时针递减的。 理论上很简…

node自主学习——fs文件操作模块

目录 读文件 读文件是否成功的判定 写文件 写文件是否成功的判定 备注&#xff1a;VsCode、node v18.17.0 读文件 fs.readFile(文件路径, 编码格式&#xff08;可选&#xff09;, 回调函数)// 回调函数可以打印失败和成功的结果 // 若成功&#xff0c;err的值为null // 若…

自动化测试之数据驱动与关键字驱动

目录 1.录制/回放的神话 2.数据驱动的自动化测试框架 3.关键字驱动的自动化测试 初次接触自动化测试时&#xff0c;对数据驱动和关键字驱动不甚理解&#xff0c;觉得有点故弄玄须&#xff0c;不就是参数和函数其嘛&#xff01;其实其也体现了测试所不同与开发的一些特点&…

【JavaScript】Function的祖传方法call与apply

引言 内容速递 看了本文您能了解到的知识&#xff01; 在本篇文章中&#xff0c;将带你了解什么是call和apply&#xff0c;call和apply的用途、如何手写call和apply以及call和apply的使用场景。 1、什么是call和apply call()和apply()是JavaScript中的两个内置方法&#xff…

面试题:redis是单线程、StringBuffer是线程安全的

1、说明String 和StringBuffer的区别 类底层/ 可变&#xff1f;线程安全Stringfinal char[] 不可变是StringBuffer char[] 可变 是&#xff08;synchronized方法&#xff09;StringBuilder char[] 可变否 (4条消息) Java基础&#xff1a;String、StringBuffer、…

mcu 启动流程

MCU启动流程 MCU启动流程 MCU启动流程1 MCU的启动方式2 MCU程序启动执行过程3 启动过程的执行工作4 keil调式过程验证 1 MCU的启动方式 单片机的启动方式&#xff0c;以stm32为例&#xff0c;如下&#xff1a; 不同的下载方式对应的不同的启动方式&#xff0c;stm32主要有三种…

【最新教程】树莓派安装系统及VNC远程桌面连接

大家好&#xff0c;今天就不给大家介绍PYTHONL ,今天我作为一个刚入坑树莓派的小白&#xff0c;整理了一下自己安装树莓派的整个过程&#xff0c;分享给大家。 目录 树莓派 准备工作&#xff1a; 树莓派远程ssh失败access denied 原因&#xff1a; 树莓派系统安装 1、下载…

ImportError: cannot import name ‘imresize‘ from ‘scipy.misc‘

ImportError: cannot import name ‘imresize’ from ‘scipy.misc’ 今天在运行项目时发现了部分代码出现问题&#xff0c;报错图片如下&#xff1a; 通过了解得知&#xff0c;imresize已经被最新版本的Scipy库弃用了&#xff0c;所以在这里&#xff0c;处理这种错误可以选择…

ylb-接口6验证手机号是否注册

总览&#xff1a; 1、service处理 在api模块下service包&#xff0c;创建一个UserService接口&#xff1a;&#xff08;根据手机号查询数据queryByPhone(String phone)&#xff09; package com.bjpowernode.api.service;import com.bjpowernode.api.model.User; import co…

前端 | (六)CSS盒子模型 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 文章目录 &#x1f4da;元素的显示模式&#x1f407;CSS长度单位&#x1f407;元素的显示模式⭐️块元素&#xff08;block&#xff09;⭐️行内元素&#xff08;inline&#xff09…

网工内推 | 美图秀秀招网工,大专以上,15薪,NP认证优先

01 美图公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、美图大厦网络、分公司网络、IT相关项目的网络、办公内网服务器&#xff1b; 2、负责网络的设计、运行、管理和维护等工作&#xff1b; 3、负责远程办公环境的优化、运行、管理和维护工作&#xff1b; 4、…

UnxUtils工具包,Windows下使用Linux命令

1. 前言 最近写批处理多了&#xff0c;发现Windows下的bat批处理命令&#xff0c;相比Linux的命令&#xff0c;无论是功能还是多样性&#xff0c;真的差太多了。但有时候又不得不使用bat批处理&#xff0c;好在今天发现了一个不错的工具包&#xff1a;UnxUtils&#xff0c;这个…

Generative Adversarial Network

Goodfellow,2014年 文献阅读笔记--GAN--Generative Adversarial NetworkGAN的原始论文-组会讲解_gan英文论文_Flying Warrior的博客-CSDN博客 启发:如何看两个数据是否来自同一个分布? 在统计中,two sample test。训练一个二分类的分类器,如果能分开这两个数据,说明来自…

基于MSP432P401R跟随小车【2022年电赛C题】

文章目录 一、赛前准备1. 硬件清单2. 工程环境 二、赛题思考三、软件设计1. 路程、时间、速度计算2. 距离测量3. 双机通信4. 红外循迹 四、技术交流 一、赛前准备 1. 硬件清单 主控板&#xff1a; MSP432P401R测距模块&#xff1a; GY56数据显示&#xff1a; OLED电机&#x…

实现本地缓存-caffeine

目录 实现caffeine cache CacheManager Caffeine配置说明 创建自定义配置类 配置缓存管理器 编写自动提示配置文件 测试使用 创建测试配置实体类 创建测试配置类 创建注解扫描的测试实体 创建单元测试类进行测试 实现caffeine cache CacheManager SimpleCacheManag…

HttpClient使用MultipartEntityBuilder上传文件时乱码问题解决

HttpClient使用MultipartEntityBuilder是常用的上传文件的组件&#xff0c;但是上传的文件名称是乱码&#xff0c;一直输出一堆的问号&#xff1a; 如何解决呢&#xff1f;废话少说&#xff0c;先直接上代码&#xff1a; public static String doPostWithFiles(HttpClient http…

git使用问题记录-权限

注意点&#xff1a; 1、在远程仓库中直接创建项目时&#xff0c;默认分支为main 2、git push报错 原因&#xff1a;即使是项目文件的创建者&#xff0c;但上层目录的权限为developer&#xff0c;无法push项目&#xff0c;找上层管理员修改权限为maintainer或owner可push代码…