AtCoder Regular Contest 171(A~B)

news2024/11/26 10:20:22

A - No Attacking

N*N棋盘上,放A个rook棋和B个pawn棋。

条件1:假设(i,j)上有一个rook,那么这 i 行和这 j 列,都不能再有其他棋子。

条件2:假设(i,j)上有一个pawn,那么(i-1,j)上不能有棋子。

满足条件的情况下,能放完A个rook和B个pawn,输出Yes,放不完则输出No。

分析:两个条件操作起来太麻烦了,先考虑把其中一个条件解决,条件2约束的只有两个格子,而条件1是一行和一列。所以选择先把棋盘放满pawn棋,假设0为空,1为rook,2为pawn。

接下来再去放rook棋(全部放对角线上方便处理),放在0上,减少了3个pawn;放在2上,则会减少7个pawn。

所以我们需要先把能用的0行放完,没地方放了再放到2上。

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;

int n,a,b;
bool flag=false;

void solve(){
    cin>>n>>a>>b;
    int all=(n)*(n/2+n%2),cost=n/2+n%2,tmp=n/2;
    //一共有all个pawn棋(奇数整除之后还少一行,要加上n%2)
    //每次往0行上放一个rook棋会减少cost个pawn棋(奇数会多一个,加n%2),有tmp个0行
    
//    while(a){//放rook棋
//        a--;
//        if(tmp){//还有0行
//            all-=cost;//每次减少cost个
//            tmp--;
//        }else{
//            cost--;//规律减少,最终能放的内容会变成cost*cost个
//            flag=true;
//        }
//    }
    
    if(a<=tmp){//此处if块由上面while简化得出,上面循环总复杂度a*T有超时的可能性
        all-=cost*a;
    }else{
        flag=true;
        cost-=a-tmp;
    }

    if(flag==false){
        if(all>=b)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }else{
        if(cost<0)cout<<"No"<<endl;
        else {
            if(cost*cost>=b)cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        }
    }
}

void init(){
    flag=false;
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t;
    cin>>t;
    while(t--)solve(),init();
    return 0;
}

补题:B - Chmax

序列A:3 3 3 4(输入)

序列P:1 2 3 4(1~N的任意一个排列,也可以是1 2 4 3,4 3 2 1等等)

序列B:1 2 3 4(限定为1~N,若N=5则B:1 2 3 4 5)

操作:找到最小的Bi,若Bi<P(Bi),则Bi=P(Bi)。(可以证明成功交换的操作次数是有限的)

在执行完所有成功交换的操作下,问有多少个P序列可以让序列B成为序列A。(B ---P---> A)

分析:模拟一下题目操作,就是类似一个链式前向星的东西,或者说并查集也可以。

1会先变成2,然后变成3,最终变成4(条件限制因只能往大的变,所以最后不会变成1)

所以根据A去逆推P的可能

前面3的肯定是链在一起的(因为是一个排列,不会出现多个3)

所以P的前两个一定是2和3,不然就无解,根据条件第三个可以在1~3之内任选

第四个也可以是1~4里面任选一个。

此处2和3已经被用了,所以第三个只能填1,第四个只能填4

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;
const int N=2e5+5,MOD=998244353;

int n,a[N],ans=1,b[N],cnt,use[N];

void noans(){
    cout<<0<<endl;
}

void solve(){
    cin>>n;
    per(i,1,n)cin>>a[i];

    per(i,1,n)if(a[i]<i or a[a[i]]!=a[i])return noans();

    //A是经过P处理完的序列,根据条件可得a[i]>=i或者a[i]==a[a[i]]
    //Bi最小都有Bi=i,B在P的链操作下只能变得更大,不能变小,所以a[i]<i无解
    //处理完的a[i]必有【a[i]==i】或者【a[i]>i时a[i]==a[a[i]](往后链)】,否则无解。
    
    rep(i,n,1){//逆序循环
        if(!b[a[i]])b[a[i]]=i;//最后出现的下标
        else {
            int tmp=a[i];//要预先保留a[i]的值,不然下面a[i]就变了
            a[i]=b[a[i]];//往前推,如果有出现过的,前面要往后链,则固定一个数。
            b[tmp]=i;
            use[a[i]]=true;
        }
    }

    per(i,1,n){
        if(!use[i])cnt++;//每一位都可以使用1~N中未固定的数(累乘,组合数学)
        if(a[i]==i)ans*=cnt,ans%=MOD,cnt--;//使用之后记得cnt--
        //(ans*=cnt)%=MOD   这样简写是可以的,不要错写成ans*=cnt%=MOD,或者ans*=(cnt)%=MOD
    }

    cout<<ans<<endl;
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    while(t--)solve();
    return 0;
}

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

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

相关文章

07、全文检索 -- Solr -- Solr 全文检索 之 为索引库添加中文分词器

目录 Solr 全文检索 之 为索引库添加中文分词器添加中文分词器1、添加中文分词器的 jar 包2、修改 managed-schema 配置文件什么是 fieldType 3、添加 停用词文档4、重启 solr5、添加【*_cn】动态字段&#xff0c;并为该字段设置中文分词器6、演示分词器的区别演示 text_cjk 这…

红队渗透靶机:TIKI: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、dirsearch 2、gobuster WEB web信息收集 searchsploit cms信息收集 ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:2…

基于tomcat的https(ssl)双向认证

一、背景介绍 某个供应商服务需要部署到海外&#xff0c;如果海外多个地区需要部署多个服务&#xff0c;最好能实现统一登录&#xff0c;这样可以减轻用户的使用负担&#xff08;不用记录一堆密码&#xff09;。由于安全问题&#xff08;可能会泄露用户数据&#xff09;&#x…

k8s学习-Kubernetes的包管理器Helm

1.1 为何需要Helm Kubernetes能够很好地组织和编排容器&#xff0c;但它缺少⼀个更高层次的应用打包工具&#xff0c;而Helm就是来干这件事的。 先来看个例子。 比如对于⼀个MySQL服务&#xff0c;Kubernetes需要部署下面这些对象&#xff1a; &#xff08;1&#xff09;Serv…

2. 从波动方程到亥姆赫兹方程

波动方程中同时包含了时间和空间分量&#xff0c;为进一步简化波动方程&#xff0c;可以假设电场分量为 &#xff08;1&#xff09; &#xff08;注&#xff1a;这个假设对我而言有点突兀&#xff0c;但我想对于数学好的人来说就是一个常见的解题思路。可能就像高中数列题&…

【开源】JAVA+Vue+SpringBoot实现二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

用于医疗行业的大功率电阻器是什么?

设计医疗电子设备比设计其他行业应用更具挑战性。由于涉及宝贵的生命&#xff0c;因此各种医疗设备中使用的产品和组件必须绝对可靠且安全&#xff0c;毋庸置疑。即使是各种国际机构制定的合规和安全标准&#xff0c;在医疗保健行业也更加严格&#xff0c;这是正确的。 无源电气…

Re-understanding of data storytelling tools from a narrative perspective

作者&#xff1a;任芃锟, 王轶 & 赵凡 发表&#xff1a;Visual Intelligence&#xff0c;新刊&#xff0c;实行单盲同行评议制度。由施普林格以开放获取 (Open Access) 模式出版。获2022“中国科技期刊卓越行动计划高起点新刊”项目资助&#xff0c;目前出版不收取文章处理…

onlyfans无法订阅?2024年订阅onlyfans最新教程一键直达

讲在前面-关于OnlyFans 欧美除了脸书和推特之外&#xff0c;又新起了一个社交软件&#xff0c;它就是onlyfans&#xff0c;简称o站。 在极短的时间内&#xff0c;它就拥有了1.2亿的用户量&#xff0c;而全站订阅金额更是达到了17亿英镑&#xff0c;换成人民币&#xff0c;数额…

使用docker/docker-compose通过自定义的redis.conf文件启动redis 7.2.3,附上docker-compose.yml的redis配置

目录 一.复制以及使用自定义的redis.conf文件 1.在官网拷贝对应版本的配置文件内容新建redis.conf文件进行粘贴。&#xff08;推荐&#xff09; 2.也可以去官网下载对应版本的redis的tar.gz包&#xff0c;解压后在根目录下找到redis.conf文件复制也可也可。 二.配置redis.c…

机器学习复习(8)——基本概念

目录 "benchmark"和"baseline"的定义和区别 R1 score概念 LoRA微调概念 "benchmark"和"baseline"的定义和区别 在计算机视觉领域的论文中&#xff0c;"benchmark"和"baseline"这两个术语经常被使用&#xff0…

BootStrap学习笔记JS插件(一)--模态弹出框

一、弹出框基础 <div class"modal show"><div class"modal-dialog"><div class"modal-content"><div class"modal-header"><button type"button" class"close" data-dismiss"mo…

惠普公司也要注销了?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 惠普科技(上海)有限公司企业状态由存续变更为注销&#xff0c;这意味着惠普公司也要注销了?这是怎么回事?戴尔公司也准备注销了呢?这家美国科技巨头为什么放弃了世界最大的消费市场呢? 之前就有消息称惠普中国…

BFS——双向广搜+A—star

有时候从一个点能扩展出来的情况很多&#xff0c;这样几层之后搜索空间就很大了&#xff0c;我们采用从两端同时进行搜索的策略&#xff0c;压缩搜索空间。 190. 字串变换(190. 字串变换 - AcWing题库) 思路&#xff1a;这题因为变化规则很多&#xff0c;所以我们一层一层往外…

新开发板-正点原子的rk3568

有好长一段时间没有更新博客了&#xff0c;上次更新还是在上次...哈哈开个玩笑&#xff0c;上次stm32f407的定时器还没写完&#xff0c;就备战期末去了&#xff08;电信学院&#xff0c;你懂的&#xff09;&#xff0c;一直没更新&#xff0c;原因是我实习去了&#xff0c;在忙…

Java项目管理01-Maven基础

一、Maven的常用命令和生命周期 1.Maven的常用命令使用方式 complie&#xff1a;编译&#xff0c;将java文件编译为class字节码文件 clean&#xff1a;清理&#xff0c;删除字节码文件 test&#xff1a;测试&#xff0c;运行项目中的test类 package&#xff1a;打包&#x…

IDEA新建文件夹后右击不能创建class类排错方法

目录 1 查看自身文件名是否为关键词 2 查看是否被“蓝色文件夹”给包含了 3 检查设置那边的class模板 4 报错解决 1 查看自身文件名是否为关键词 如下使用了 Java中的关键词"class"所以才无法创建包 ---------------------------------------------------------…

51单片机之LED灯模块篇

御风以翔 破浪以飏 &#x1f3a5;个人主页 &#x1f525;个人专栏 目录 点亮一盏LED灯 LED的组成原理 LED的硬件模型 点亮一盏LED灯的程序设计 LED灯闪烁 LED流水灯 独立按键控制LED灯亮灭 独立按键的组成原理 独立按键的硬件模型 独立按键控制LED灯状态 按键的抖动 独立按键…

KubeMQ简介

如今&#xff0c;企业组织之间的竞争是残酷的。每个组织都希望在其系统之间即时、实时或近乎实时地交换信息&#xff0c;以便做出更好、更快的决策。为了使此类信息持续流动&#xff0c;应用程序组件之间的集成需要无缝。为了充分利用云计算的所有优势&#xff0c;如今构建的应…

双非本科准备秋招(16.1)—— 力扣二叉树

1、101. 对称二叉树 检查是否对称&#xff0c;其实就是检查左节点等不等于右节点&#xff0c;我们可以用递归来做。 如果左右节点都为null&#xff0c;说明肯定对称呀&#xff0c;返回true。 如果一个为null一个不为null&#xff0c;或者左右的值不相等&#xff0c;则为false。…