AtCoder Beginner Contest 345 A - E 题解

A - Leftrightarrow

思路

判断第一个字符是否为\texttt{<},最后一个字符是否为\texttt{>},都满足的话,再判断中间字符是否都为\texttt{=}

代码

#include<iostream>
using namespace std;
#define int long long

bool check(string s){
	int n=s.size();
	if(s[0]!='<') return false;
	if(s[n-1]!='>') return false;
	for(int i=1;i<n-1;i++)
	    if(s[i]!='=') return false;
	return true;
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	string s;
	cin>>s;
	cout<<(check(s)?"Yes":"No")<<endl;
	return 0;
}

B - Integer Division Returns

思路

首先,\left\lceil \dfrac{a}{b} \right\rceil = \left\lfloor \dfrac{a+b-1}{b} \right\rfloor,所以答案可由\left\lfloor \dfrac{X+9}{10} \right\rfloor得到。

但是C++是向0取整的(正数向下取整,负数向上取整),所以X为负数且不整除时,答案需要加一。

代码

#include<iostream>
using namespace std;
typedef long long LL;
int main(){
    LL n;
    cin>>n;
    LL ans=(n+9)/10;
    if((n+9)<0&&(n+9)%10!=0) ans--;
    cout<<ans<<endl;
    return 0;
}

C - One Time Swap

思路

篇幅问题,直接看官方题解。

注意要开long long

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL cnt[26];
int main(){
    LL n,ans=0;
    bool flag=false;
    string s;
    cin>>s;
    n=s.size();
    for(int i=0;i<n;i++) cnt[s[i]-'a']++;
    ans=n*n;
    for(int i=0;i<26;i++){
        ans-=cnt[i]*cnt[i];
        if(cnt[i]>1) flag=true;
    }
    cout<<ans/2+flag<<endl;
    return 0;
}

D - Tiling

思路

由于数据范围很小,我们考虑暴力搜索。

C_{i,j}表示第$i$行第$j$个格子被哪一块瓷砖占用(没有被占用为-1)

为了表示哪些瓷砖可用,可以设二进制数t,第$i$位为1表示第i块瓷砖可用。

由于瓷砖可以旋转(可以竖着放,也可以横着放),因此搜索时,每块瓷砖有两种情况(除了正方形)。

为了方便编写,我从dfs中分离出两个函数,第一个函数尝试放置瓷砖并判断是否可行。

第二个函数用于回溯操作(由于第一个函数会改变$C$,所以无论是否可行都要复原)。

注意要判断C_{i,j}是不是当前瓷砖,否则出现重叠时,会影响其他正常放置的瓷砖。

#include <iostream>
using namespace std;
const int N = 12;
int a[N],b[N],c[N][N];
int n,h,w;
bool ans;

// 以(x,y)为左上角,贴一块长为a宽为b的瓷砖(编号id),判断是否可行
bool placeTile(int x, int y, int a, int b, int id){
    bool can=true;
    for(int i=x;i<x+a;i++)
        for(int j=y;j<y+b;j++){
            if(i<h&&j<w){                      // 没有出界限
                if(c[i][j]==-1) c[i][j]=id;    // 可以放,做标记
                else can=false;                // 已经被占用,不能放这块瓷砖
            }else can=false;                   // 超过边界
        }
    return can;
}

// 回溯时的操作
void doBacktrace(int x, int y, int a, int b, int id){
    for(int i=x;i<x+a;i++){
        for(int j=y;j<y+b;j++) 
            if(i<h&&j<w&&c[i][j]==id) c[i][j]=-1;
    }
}

void dfs(int unused, int x, int y){
    // 找到下一个没贴瓷砖的位置
    while(c[x][y]>=0){
        y++;
        if(y>=w) x++,y=0;
        if(x>=h) break;
    }
    // 贴完了
    if(x>=h){
        ans=true;
        return;
    }
    // 尝试贴所有未使用的瓷砖
    for(int i=0;i<n;i++){
        if(unused&(1<<i)){   // 未使用
            bool can=placeTile(x,y,a[i],b[i],i);
            if(can) dfs(unused^(1<<i),x,y);    // 继续搜索
            doBacktrace(x,y,a[i],b[i],i);        // 回溯还原
            // 尝试横着放
            if(a[i]!=b[i]){                // 不是正方形
                bool can=placeTile(x,y,b[i],a[i],i);
                if(can) dfs(unused^(1<<i),x,y);
                doBacktrace(x,y,b[i],a[i],i);
            }
        }
    }
}

int main(){
    cin>>n>>h>>w;
    for(int i=0;i<n;i++) cin>>a[i]>>b[i];
    for(int i=0;i<h;i++)
        for(int j=0;j<w;j++) c[i][j]=-1;
    ans=false;
    dfs((1<<n)-1,0,0);
    cout<<(ans?"Yes":"No")<<endl;
    return 0;
}

E - Colorful Subsequence

未完待续

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

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

相关文章

Elasticsearch 索引库操作 文档操作

索引库就类似数据库表&#xff0c;mapping映射就类似表的结构。要向es中存储数据&#xff0c;必须先创建“库”和“表”。 mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a; 字段数据类型&#xff0c;常见的简…

Gogs 创建新的仓库并提交代码

Gogs 创建新的仓库并提交代码 1. 登录2. 仓库 -> 我的仓库3. 创建新的仓库4. 仓库5. Copy6. 公开代码​7. 提交成功 Gogs - gitReferences Gogs 是一款极易搭建的自助 Git 服务。 1. 登录 2. 仓库 -> 我的仓库 3. 创建新的仓库 4. 仓库 5. Copy 6. 公开代码 strongfo…

SpringBoot(RESTful,统一响应结构,输出日志,增删改查功能,分页功能,批量删除,常见bug)【详解】

目录 一、准备工作 1. 前后端分离开发流程 2. 开发规范 1.RESTful请求风格 2.统一响应结果 3.代码中输出日志 二、部门管理&#xff08;增删改查功能&#xff09; 1. 查询部门列表 2. 删除部门 3. 新增部门 4. 修改部门 三、员工管理&#xff08;分页功能和批量删除…

数字后端 EDA 软件分享

数字后端 EDA 软件分享 推荐这几家的EDA工具吧&#xff0c;虽说我也支持国产工具&#xff0c;但是我还是选择了这几家的工具 apache cadence mentor synopsys 下图我现在用的eda环境&#xff0c;利用网上的资源&#xff0c;自己独立在vmware上搭建好的EDA环境 除去pdk&#…

MySQL语法分类 DQL(6)分页查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

Matlab/simulink基于模糊PID智能控制的温度控制系统建模仿真

参考文献 Matlab/simulink基于模糊PID智能控制的温度控制系统建模仿真 该系统主要对某小区换热站的温度控制策略和控制方案进行了设计&#xff0c;其设计内 容主要包括三部分。首先是基于模糊PID智能控制的温度控制系统设计。在温度控制 算法方面&#xff0c;该设计于传统的P…

MySQL实战:监控

监控指标 性能类指标 名称说明QPS数据库每秒处理的请求数量TPS数据库每秒处理的事务数量并发数数据库实例当前并行处理的会话数量连接数连接到数据库会话的数量缓存命中率Innodb的缓存命中率 功能类指标 名称说明可用性数据库是否正常对外提供服务阻塞当前是否有阻塞的会话…

操作系统:malloc与堆区内存管理

malloc是函数而不是系统调用&#xff0c;他的底层是同调调用brk和mmap这两个系统调用实现功能的&#xff0c;具体选择brk还是mmap要看申请的空间大小以及malloc中的阈值&#xff08;一般是128kb&#xff09; 注意申请的空间只有使用才会触发缺页中断映射到物理内存 不理解的话先…

搞机笔记 MI8 dipper

刷回MIUI 之前刷了 lineage-19.1-20220728-nightly-dipper-signed 基于安卓12&#xff0c;实现了以下功能 TWRPmagisk & ROOTmicroG 退回MIUI的原因有&#xff1a; lineage 墓碑 管不住APP后台&#xff0c;太卡了MIUI提供了3GB的虚拟内存lineage 不支持人脸识别lineag…

小蓝的漆房——算法思路

题目链接&#xff1a;1.小蓝的漆房 - 蓝桥云课 (lanqiao.cn) 本题只要是通过枚举的方法&#xff0c;算出涂成每一种颜色所需的天数&#xff0c;最后在所有天数中找出最小值&#xff08;由题可知&#xff0c;最多只有60种颜色&#xff0c;所以可以尝试算出每种颜色所需的时间&am…

在雄安新区买新房要注意什么?有哪些注意事项?

雄安新区新建住宅均价每平方米11735元起&#xff0c;二手房每平方米8950元起。 整体价格非常有优势。 雄安新区房价走势与区域发展直接相关。 而且&#xff0c;雄安新区已经成立五周年了。 2022年&#xff0c;雄安新区多项重点项目将陆续竣工。 雄安新区城市基础设施建设已初具…

Spring注解开发(Spring学习笔记六)

1、在Spring4之后&#xff0c;要使用注解开发&#xff0c;必须保证aop包的导入 2、使用注解需要导入context约束&#xff0c;增加注解的支持(没有注解和支持注解是使用不了的) <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http:/…

用尾插的思路实现 “合并两个有序链表”

一、题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#…

二. CUDA编程入门-CUDA中的线程与线程束

目录 前言0. 简述1. 执行一下我们的第一个CUDA程序2. CUDA中的grid和block3. block和thread的遍历(traverse)4. nvcc编译器5. Makefile部分6. 执行我们的第二个CUDA程序7. Makefile添加的部分总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接…

[C语言]——VS实用调用技巧

一.什么是bug bug本意是“昆⾍”或“⾍⼦”&#xff0c;现在⼀般是指在电脑系统或程序中&#xff0c;隐藏着的⼀些未被发现的缺陷或问题&#xff0c;简称程序漏洞。 “Bug” 的创始⼈格蕾丝赫柏&#xff08;Grace Murray Hopper&#xff09;&#xff0c;她是⼀位为美国海军⼯…

MQ组件之RabbitMQ学习

MQ组件之RabbitMQ入门 同步调用和异步调用 在微服务架构中&#xff0c;服务之间的调用有同步调用和异步调用两种方式。 我们使用OpenFeign去调用是同步调用&#xff0c;同步调用的缺点很明显&#xff0c;在下图的场景中&#xff0c;支付完成后需要调用订单服务、仓库服务、短…

MyBatisPlus 之二:SpringBoot 快速整合 MyBatisPlus 详细步骤

SpringBootMyBatisPlus Spring Boot 结合 MyBatis Plus 是一种常见的 Java 后端开发框架组合&#xff0c;能够快速构建高性能、易于维护的 CRUD 应用程序。以下是 Spring Boot 集成 MyBatis Plus 的基本步骤 一、快速体验 注意&#xff1a;下面版本 idea2020 SpringBoot2.* …

node.js快速入门-day03

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;给自己一个梦想&#xff0c;给世界一个惊喜。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章目录 web服务器创建…

Rocket MQ 从入门到实践

为什么要使用消息队列&#xff0c;解决什么问题&#xff1f;&#xff08;消峰、解藕、异步&#xff09; 消峰填谷 客户端》 网关 〉 消息队列》秒杀服务 异步解耦 消息队列中的重要概念理解。&#xff08;主题、消费组、队列&#xff0c;游标&#xff1f;&#xff09; 主题&…

phpstudy搭建简单渗透测试环境upload-labs、DVWA、sqli-labs靶场

好久没有做渗透相关的试验了&#xff0c;今天打开phpstudy发现很多问题&#xff0c;好多环境都用不了&#xff0c;那就卸载重装吧&#xff0c;顺便记录一下。 小皮下载地址&#xff1a; https://www.xp.cn/download.html 下载安装完成 一、下载搭建upload-labs环境 github…