AtCoder Regular Contest 171(A~B)

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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cadence——输出文件部分

本文章基于凡亿教育基础入门66讲 &#xff08;一&#xff09;MARK点&#xff0c;工艺边&#xff0c;阻抗说明相关准备文件 &#xff08;1&#xff09;MARK点 a,点击设置&#xff0c;用户偏好设置 b,指定MARK焊盘路径和封装路径 c,点击放置&#xff0c;手动 d,点击高级设置,将…

什么是TCP三次握手、四次挥手?

&#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是小徐&#x1f947;☁️博客首页&#xff1a;CSDN主页小徐的博客&#x1f304;每日一句&#xff1a;好学而不勤非真好学者 &#x1f4dc; 欢迎大家关注&#xff01; ❤️ 1、三次握手 你(客户端)给一个朋友(服务器)打电…

文心一言 VS 讯飞星火 VS chatgpt (194)-- 算法导论14.3 2题

二、用go语言&#xff0c;改写 INTERVAL-SEARCH 的代码&#xff0c;使得当所有区间都是开区间时&#xff0c;它也能正确地工作。 文心一言&#xff0c;代码正常运行&#xff1a; 在Go语言中&#xff0c;处理开区间&#xff08;open intervals&#xff09;时&#xff0c;我们需…

034 多维数组

二维数组理解图例 示例 int[][][] nums new int[2][2][2]; Random random new Random(); for (int[][] num : nums) {for (int[] ints : num) {for (int i 0; i < ints.length; i) {// 生成100以内的随机数ints[i] random.nextInt(100);}} } for (int[][] num : nums)…

Bard 最新更新:全球开放访问Gemini Pro并生成图片

深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领域的领跑者。点击订阅&#xff0c;与未来同行&#xff01; 订阅&#xff1a;https://rengongzhineng.io/ 。 今…

[嵌入式AI从0开始到入土]5_炼丹炉的搭建(基于wsl2_Ubuntu22.04)

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第一章 昇腾Altas 200 DK上手 第二章 下载昇腾案例并运行 第三章…

【5G SA流程】5G SA下终端完整注册流程介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客内容主要围绕: 5G/6G协议讲解 …

JVM工作原理与实战(三十五):性能调优

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、性能调优 1.性能调优方法 二、性能调优案例 案例1&#xff1a;解决CPU占用率高问题的方案 案例2&#xff1a;接口响应时间长问题 案例3&#xff1a;定位底层性能问题 案例4&a…

echarts使用之地图(五)

1 基本使用 百度地图 API : 使用百度地图的 api , 它能够在线联网展示地图 , 百度地图需要申请 ak 矢量地图 : 可以离线展示地图 , 需要开发者准备矢量地图数据。本文使用该方式。 json格式的数据如下&#xff1a; 格式参照&#xff1a;GeoJSON <!DOCTYPE html&…

车载充电器(OBC)氮化镓(GaN)驱动(高压高功率)设计(第四篇)

上图来自于网络 1、GaN FET概念 GaN FET&#xff0c;全称为Gallium Nitride Field-Effect Transistor&#xff08;氮化镓场效应晶体管&#xff09;&#xff0c;是一种采用氮化镓&#xff08;Gallium Nitride, GaN&#xff09;材料制作的新型功率半导体器件。相较于传统的硅基…

枚举(Java)

一、概念 枚举是一种特殊的类。 格式&#xff1a; 修饰符 enum 枚举类名{ 对象名称1&#xff0c;对象名称2&#xff0c;....; 其他成员... } 二、枚举类的特点 1.枚举类的第一行只能罗列一些名称&#xff0c;并且这些名称都是常量&#xff0c;每个常量记住一个枚举类对象…

【Java程序设计】【C00247】基于Springboot的农机电招平台(有论文)

基于Springboot的农机电招平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的农机电招平台 本系统分为系统功能模块、管理员功能模块、农机机主功能模块以及使用者功能模块。 系统功能模块&#xff1a;农机电招…

ubuntu离线安装k8s

目录 一、前期准备 二、安装前配置 三、安装docker 四、安装cri-dockerd 五、部署k8s master节点 六、整合kubectl与cri-dockerd 七、网络等插件安装 八、常见问题及解决方法 一、前期准备 ①ubuntu系统 本地已安装ubuntu系统&#xff0c;lsb_release -a命令查看版本信…

【数据结构】排序---C语言版

七大排序算法 一、对于排序的分类&#xff1a;二、插入排序1、直接插入排序&#xff08;1&#xff09;基本思想&#xff1a;&#xff08;2&#xff09;直接插入排序&#xff1a;&#xff08;3&#xff09;代码实现&#xff1a;&#xff08;4&#xff09;总结&#xff1a; 2、希…

2024机械工程师面试题

1.常用的机械画图软件有哪些 SolidWorks、Pro/e、CATIA、UG、Creo、CAD、inventor。CAXA电子图板. 2.第一视角是___&#xff0c;第三视角是___&#xff1b; 只要区别是&#xff1a;物体所处的位置不同。一般中国都使用第一视角的。 3.气缸属于_____执行元件&#xff0c;电磁…

AIGC技术讲解以及应用的落地

简介 近期&#xff0c;火爆的“AI绘画”、图片转AI图&#xff0c;智能聊天软件ChatGPT&#xff0c;引起了人们广泛关注。人工智能潜力再次被证明&#xff0c;而这三个概念均来自同一个领域&#xff1a;AIGC。AIGC到底是什么&#xff1f;为什么如此引人关注&#xff1f;AIGC能产…

关系型数据库的介绍与历史(History of DataBase)

昨晚和大家聊到 数据库&#xff08;DataBase 简称DB&#xff09;简单概述 &#xff0c;今天简单和大家聊聊 关系型数据库&#xff08;关系数据库&#xff09; 的历史&#xff0c;它是以关系模型&#xff08;Relational Model&#xff09;来构建的数据存储系统。 关系数据库有个…

C/C++内存管理的底层调用逻辑

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…

10_机械臂运动学_机械臂C++逆解——2023

就是算&#xff01; 遨博机械臂改进DH参数表&#xff1a; 机械臂正运动学连杆变换通式&#xff1a; 其中si代表sin(θi),ci代表cos(θi) sij代表sin(θi-θj),cij代表cos(θi-θj) sijk代表sin(θi-θjθk),cijk代表cos(θi-θj-θk)&#xff0c;用两角和差公式直接展开即可. 每…

如何获取气象数据

问题 如何获取气象数据 详细问题 笔者使用NOAA获取部分气象数据&#xff0c;但是涉及字段有限&#xff0c;如何获取更丰富的气象数据&#xff0c;譬如包括太阳辐射、温度、湿度、云覆盖等信息呢&#xff1f; 解决方案 步骤1、访问https://power.larc.nasa.gov/data-access…