2023牛客暑假多校训练营2

2023-10-27

D.The Game of Eating

贪心

 

题目说每个人只关心自己享用的菜肴,而不考虑他人,每个人的目标都是使得自己喜欢的菜肴尽可能多

也就是说每个人都很鸡贼,它们当下都是做出最有利于自己的选择,对于某一个人,他首先会算在他之后他最喜欢的菜是否会被选择,如果会被选择,那么他就不选自己最喜欢的菜,然后再看次喜欢的菜,看是否会被选,以此类推,直到发现后面没人选时,他才会选,这样当k个菜都选完时,他喜欢的菜的数量可以达到最大,每个人都会这么想,按这样的话,对于最后一个选菜的人,他自己最喜欢的菜如果没人选的话,他自己肯定会选,所以前面的人算到最后一个人会选,所以前面的人故意不选这道菜,最后只能让最后一个人选这道菜,所以倒过来贪心即可

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#define endl '\n'
using namespace std;
const int N=2010;
int a[N][N];
int flag[N];
void solve()
{
    int n,m,k;
    cin>>n>>m>>k;
    memset(flag,0,sizeof flag);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    //从第一个人开始选菜,一人选一道菜,一共选k道菜,现从k往前遍历
    for(int i=k;i;i--){
        int t=(i-1)%n+1;//选第i道菜轮到了编号为t的人
        int x=0;
        for(int j=1;j<=m;j++){
            if(!flag[j]&&a[t][j]>a[t][x]) x=j;
        }
        flag[x]=1;
    }
    for(int i=1;i<=m;i++){
        if(flag[i]) cout<<i<<" ";
    }
    cout<<endl;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t;
    cin>>t;
    while(t--)
    solve();
    return 0;
}

E.square 

题意是找到一个y(大于等于x),使得x是y的平方的前缀(前缀的位数只有可能是1到9,因为x最大才1e9,所以只需要枚举一下10的幂,i从0到9)

(y^2)/(10^i)=x -->x*10^i<=y^2,所以要保证y^2大于等于x*10^i,如果y^2小于x*10^i的话,x不可能是y^2的前缀的

然后如果y的平方的前缀是x的话(先将x,y^2分别转为字符串并存储,取y^2字符串的前x位和字符串x比较是否相等),那么就符合

比如说x=12,x*10=120,sqrt(x*10)=10,10*10小于120,不可能

11*11=121,发现可以

x*100=1200,sqrt(x*100)=34,34*34小于1200,不可能

35*35=1225,发现可以,然后35*35=1296,发现也可以

说明要想可以,首先得保证y^2大于等于x*10^i,然后从符合条件最小的y开始找,如果y符合,后面可能还有符合的y,但是最小的y不符合,那么后面就更不可能符合了,因为比如说x为12,然后x*10^i,某个最小的y,y^2的前两位是13,已经不符合前缀12了,所以y更大的话就更不可能符合前缀12了

法一:

 AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;
typedef long long LL;
LL solve()
{
    LL x;
    cin>>x;
    if(x==0) return 0;
    string xx=to_string(x);
    string s;
    int len=xx.size();
    int res=-1;
    for(int i=0;i<10;i++){
        LL y=sqrt(x*pow(10,i));
        if(y*y<x*pow(10,i)) y++;
        s=to_string(y*y);
        if(s.substr(0,len)==xx) return y;
    }
    return res;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    cout<<solve()<<endl;
    return 0;
}

法二:

AC代码:

#include <iostream>
#include <cmath>
#define int long long
using namespace std;
int solve()
{
    int x;
    cin>>x;
    int z=x+1;
    int y;
    int flag=0;
 //最多循环10次,为了保证x不超出long long范围,从而导致溢出,发生错误
    for(int i=0;i<10;i++){
        y=sqrt(x*pow(10,i));
  //这边改成y*y<pow(10,i)而不是y*y!=pow(10,i),因为pow有精度问题,可能数太大了开根号不一定会下取整,可能上取整
        if(y*y<x*pow(10,i)) y++;
  //如果y*y大于等于x*10的幂并且y*y小于(x+1)*10的幂
        if(y*y>=x*pow(10,i)&&y*y<z*pow(10,i)){
            flag=1;
            break;
        }
    }
    if(flag==1) return y;
    else return -1;
}
signed main()
{
    int t;
    cin>>t;
    while(t--)
    cout<<solve()<<endl;;
    return 0;
}

K.Box

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#define int long long
using namespace std;
const int N=1e6+10;
int f[N][3];
//只需考虑当前枚举到的i是否有盖子,以及它的盖子左移,还是它的前一个盖子右移
//f[i][0]表示当前状态没有盖子,本来就没有盖子也有可能是把盖子给了左边,1到i获得的最大分数
//f[i][1]表示当前状态有盖子,而且是本来就有盖子,1到i获得的最大分数
//f[i][2]表示当前状态有盖子,但是是左边给了它盖子,1到i获得的最大分数
int a[N],b[N];
int n;
void solve()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) cin>>b[i];
    for(int i=1;i<=n;i++){
        //如果当前有盖子
        if(b[i]){
            //f[i][0]表示i没盖子,所以需要把i的盖子左移,f[i-1][0]表示i-1没盖子,1到i-1获得的最大分数,
            //然后加上a[i-1]即为f[i][0],1到i获得的最大分数
            f[i][0]=f[i-1][0]+a[i-1];
            //f[i][1]表示i当前状态有盖子,而且是本来就有盖子,所以前面i-1三种状态只需取最大值即可,再加上a[i]
            f[i][1]=max({f[i-1][0],f[i-1][1],f[i-1][2]})+a[i];
        }
        //如果当前没有盖子
        else {
            //只要取i-1三种状态最大的就行
            f[i][0]=max({f[i-1][0],f[i-1][1],f[i-1][2]});
        }
        //如果前一个有盖子,这个情况单独考虑,因为把前一个盖子右移,就不需要考虑当前位置有无盖子了
        //f[i][2]表示当前状态有盖子,但是是左边给的盖子,可以是前面i-1本来就有盖子,然后将盖子右移,导致自己没有盖子了,也可以是
        //前面i-1本来就有盖子,然后将盖子右移,但是i-2的盖子又给了i-1
        if(b[i-1]) f[i][2]=max(f[i-1][1]+a[i]-a[i-1],f[i-1][2]+a[i]);
    }
    cout<<max({f[n][0],f[n][1],f[n][2]})<<endl;
}
signed main()
{
    solve();
    return 0;
}

I.Link with Gomoku 

五子棋,双方博弈,轮流下,首先得保证双方数量相等或者差一个(这很关键)

然后就是保证横着竖着斜着不能有连续5个相同

行数为0到n-1,列数为0到m-1

可以以4行为1个循环,前两行偶数列放o,奇数列放x,后两行偶数列放x,奇数列放o(这样的好处是不需要管列数是奇数还是偶数,在一行中数量是相当的)

最后要保证双方数量相等或者差一个,需要在最后特殊处理一下,如果n%4得到完整的k个4行后还有几行,如果还有一行,那么数量相当,不需要考虑,如果还有三行

 

如图,x会比o多一个,所以也不要考虑

所以只需要考虑还有两行的情况,只要将最后一行反置就行

AC代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e3+10;
char s[N][N];
int n,m;
void solve()
{
    cin>>n>>m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(i%4<2){
                if(j&1) s[i][j]='o';
                else s[i][j]='x';
            }
            else{
                if(j&1) s[i][j]='x';
                else s[i][j]='o';
            }
        }
    }
    if(n%4==2){
        for(int j=0;j<m;j++){
            if(j&1) s[n-1][j]='x';
            else s[n-1][j]='o';
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cout<<s[i][j];
        }
        cout<<endl;
    }
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t;
    cin>>t;
    while(t--)
    solve();
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023牛客暑假多校训练营2 的相关文章

随机推荐

  • windows 64位 安装mvn提示 不是内部或外部命令

    在安装mvn的过程中当在mvn的目录下去执行mvn命令的时候是可以正常执行的 当设置好环境变量后执行后发现提示mvn不是内部命令 原因是设置的MAVEN HOME变量未被Path解析 解决办法是 直接把path中的 MAVEN HOME b
  • vue子组件弹窗 el-dialog

    弹窗 在vue中结合elementui 在父组件中通过点击事件 控制子组件弹窗显示 将父组件的值通过props的方式传递给子组件弹窗 子组件通过computed的方式来获取值和设置新值 在set中调用 emit update porp 方法
  • 51nod 1165 整边直角三角形的数量(两种解法)

    链接 http www 51nod com Challenge Problem html problemId 1165 直角三角形 三条边的长度都是整数 给出周长N 求符合条件的三角形数量 例如 N 120 共有3种不同的满足条件的直角3角
  • Understanding and Detecting Software Upgrade Failures in Distributed Systems

    分布式系统中的升级故障 Tips 摘要 介绍 方法论 升级故障的严重程度 升级故障的根本原因 升级故障的触发因素 测试和检测升级故障 未来研究方向 相关工作和总结 后记 Tips 作者主页 论文下载地址 摘要 升级是破坏分布式系统可用性的不
  • iOS内购(IAP,In App Purchases-在APP内部支付),设置及使用

    项目中使用到了中间货币 金币 的形式来进行功能使用 模式是使用RMB换成 金币比如 1RMB 10金币 所以会集成第三方的支付平台 使用了微信和支付宝的第三方平台过后 发现审核失败 被苹果拒绝 查了一查原因 才是因为苹果对app内的中间币的
  • 分支语句简单讲

    分支语句之if语句 if 表达式 语句1 else 语句2 if语句中if else后默认只有一条语句 若要跟多条语句 要用 把语句括起来 例如下面 if age lt 18 printf 未成年 n printf 不能喝酒 n else
  • 如何开发kanzi插件,越详细越好

    开发Kanzi插件需要使用Kanzi SDK 它提供了一系列工具和技术 可以帮助开发者实现自己的设想 并将其应用在Kanzi上 首先 我们需要从Kanzi官网上下载Kanzi SDK 然后使用IDE 如Visual Studio或Eclip
  • Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(1)

    适用于企业实际使用Python或Python框架 Tornado Django Flask等 开发的项目作为扫描目标 进行代码规范 逻辑 语法 安全检查 代码风格规范主要有几个方面 命名规范 语言规范 格式规范 其中大部分命名规范和语言规范
  • rabbitmq命令小记录

    rabbitmq学习的一些链接 http blog csdn net anzhsoft article details 19563091 检查是否有内存泄露 sudo rabbitmqctl list queues name message
  • JAVA毕业设计课设源码分享50+例

    1 基于Springboot员工薪资管理系统 2 基于server jsp智能化停车场管理系统 3 基于SSM网上点餐系统 4 基于springboot商城购物系统 5 基于springboot中小学教务管理系统 6 基于springboo
  • 如何搭建测试环境

    1 首先检查环境和本地网络是否正确 环境就是检查系统版本是否符合开发要求 系统与本地是否能连接 2 找开发要软件包 安装数据库和服务器 把压缩包拖入 或rz 一键安装或单个yum install 3 上传项目包 确认上传的路径 文档 开发
  • vs更换本地git账号

    有人认为vs中用的git账号是哪个无所谓 其实不然 git账号不同 访问的权限就不一样 那么如果想跟换git账号该怎么做呢 win7 控制面板 gt 用户帐户和家庭安全 gt 凭据管理器 编辑普通凭据中的git账号或者直接删除 然后重启vs
  • rdesktop架构解析(RDP协议分析)

    转载自 http blog csdn net songbohr article details 5309650 本文立足于rdesktop的架构层次进行解析 算是抛砖引玉 国内对RDP协议深入解析的资料到本文发布时为空白 ps 昨天在nok
  • UVM基础-sequence library

    一 sequence library的用法 1 1 sequence library在环境中的使用 uvm sequence library定义为是一堆sequence的集合 本质上其实就是uvm sequence 只不过在普通的uvm s
  • Python实现一个情人节必备表白神器——跳动的爱心,基于tkinter实现

    前言 包子们 晚上好 一般能够看到这篇文章的小伙伴 不是单身狗 那也得是一个贵族 如果你有心仪的对象啦 如果你想表白一个女生啦 如果你还在想着怎么表白女神 这不是就给大家安排好了 跳动的爱心 怎么说呢 用这个表白也可以的 万一就成了呢 哈哈
  • GOF设计模式(04)桥接模式

    简介 一 定义 1 概念 桥接 Bridge 模式 将抽象部分与其实现部分分离 使得他们都可以独立地变化 它是一种对象结构型模式 又称为接口模式 桥接符合开闭原则和单一职责原则 2 理解 在使用桥接模式时 我们首先应该识别出一个类所具有的两
  • CNN、RNN用于时间序列预测的代码接口和数据格式详解(pytorch)

    网上对时序问题的代码详解很少 这里自己整理对CNN和RNN用于时序问题的代码部分记录 便于深入理解代码每步的操作 本文中涉及的代码 https github com EavanLi CNN RNN TSF a toy 一 1D CNN 1
  • [人工智能-深度学习-32]:卷积神经网络CNN - 常见分类网络- AlexNet网络结构分析与详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 120837261 目录 第1章 卷积神
  • Eclipse Mars(4.5.2) 安装Gradle 插件

    第一步 选择Eclipse Marketplace 第二步 搜索Buildship gradle插件 并安装 第三步 gradle 安装授权协议 第四步 点击confim 完成安装后要求重启 Eclipse 第五步 Eclipse查看是否有
  • 2023牛客暑假多校训练营2

    D The Game of Eating 贪心 题目说每个人只关心自己享用的菜肴 而不考虑他人 每个人的目标都是使得自己喜欢的菜肴尽可能多 也就是说每个人都很鸡贼 它们当下都是做出最有利于自己的选择 对于某一个人 他首先会算在他之后他最喜欢