Acwing蓝桥杯集训week4

news/2025/4/3 2:52:56/文章来源:https://www.cnblogs.com/guiyou/p/18804909

AcWing 5589. 哞语言逻辑

大模拟,思路简单,但是实现时要注意代码写的不要混乱,严格执行思路

and优先级高于or,所以可以讲连着的and分成一块,然后统计0,1的数量前缀和,减少时间复杂度

更多细节:视频题解

点击查看代码
#include<bits/stdc++.h>using namespace std;const int maxn=2e5+10;
int q[maxn],id[maxn],l[maxn],r[maxn],cnt=0;
int ones[maxn],zeroes[maxn];
int n,m;
int main(){char str[10];scanf("%d %d",&n,&m);for(int i=1;i<=n;++i){scanf("%s",str);if(!strcmp(str,"true")|| !strcmp(str,"or") ) q[i]=1;if(i&1){if(i==1 || q[i-1]){++cnt;l[cnt]=i;r[cnt-1]=i-2;if(cnt>=2) ones[cnt-1]=ones[cnt-2]+!zeroes[i-2];zeroes[i]=!q[i];}else zeroes[i]=zeroes[i-2]+!q[i];id[i]=cnt;}}r[cnt]=n;ones[cnt]=ones[cnt-1]+!zeroes[n];while(m--){int ll,rr;scanf("%d %d %s",&ll,&rr,str);bool check=!strcmp(str,"true");int lid=id[ll],rid=id[rr];int a=ones[lid-1]+ones[cnt]-ones[rid];int b=zeroes[r[rid]]-zeroes[rr];if(l[lid]!=ll) b+=zeroes[ll-2];if(check==(a||!b && true)|| check==(a||!b && false)) printf("Y");else printf("N");}return 0;
}

AcWing 5590. 沿栅栏散步

乍看有点复杂,但其实适当转化后,思路就很简单,最终的路径会形成一个环,我们任意选择一个起点,沿着形成的路径,记录到达每一步所需的步数.
用二维数组记录每一个坐标对应从起点到该点的步数,由于是环,最后比较,从那一边过来所需的步数最小

点击查看代码
#include<bits/stdc++.h>using namespace std;
#define x first
#define y secondtypedef pair<int,int> pii;
const int maxn=2e5+10;
const int maxm=1e3+10;int s[maxm][maxm];
pii q[maxn];
int n,m; 
int get(int x,int tx){if(tx>x) return 1;if(tx<x) return -1;return 0; 
}
void solve(){cin>>m>>n;for(int i=1;i<=n;++i)cin>>q[i].x>>q[i].y;int sum=0,x=q[n].x,y=q[n].y;for(int i=1;i<=n;++i){int tx=q[i].x,ty=q[i].y;int vx=get(x,tx),vy=get(y,ty);while(x!=tx || y!=ty){x+=vx,y+=vy;s[x][y]=++sum;}}while(m--){pii a,b;cin>>a.x>>a.y>>b.x>>b.y;int dis=s[b.x][b.y]-s[a.x][a.y];if(dis<0){dis+=sum;} cout<<min(dis,sum-dis)<<endl;}return ;
}
int main(){int t=1;while(t--){solve();}return 0;
}

AcWing 4888. 领导者

分类讨论
其实也就2种情况

对于一个品种的牛要想成为领导者

  1. 它包含的另一个品种的牛是领导者,当且仅当这个牛满足另一个品种的牛包含其同品种所有牛
  2. 该牛包含其品种的所有牛,另一个品种的牛也包含其全部同品种牛
点击查看代码
#include<bits/stdc++.h>using namespace std;
int n;
string s;
const int maxn=1e5+10;
int e[maxn];
int rh=0,rg=0;
int lh,lg;
int sh[maxn],sg[maxn];
int ysh=-1,ysg=-1; 
int main(){cin>>n>>s;s=" "+s;for(int i=1;i<=n;++i) cin>>e[i];for(int i=1;i<=n;++i){//找出最右边的牛if(s[i]=='H') rh=i;if(s[i]=='G') rg=i;}for(int i=1;i<=n;++i) //检查最左边的牛是否包括所有同品种的牛if(s[i]=='H' ) {lh=i;if(e[i]>=rh) ysh=i;//当前i是包括所有同品种的牛break;}for(int i=1;i<=n;++i){if(s[i]=='G' ) {lg=i;if(e[i]>=rg) ysg=i;break;}}int ans=0;for(int i=1;i<=n;++i){//条件啊if(s[i]=='H')if((ysg>i && e[i]>=ysg ) || (i==lh && rh<=e[i] && ysg>i)) ++ans;if(s[i]=='G')if((ysh>i && e[i]>=ysh ) || (i==lg  && rg<=e[i] && ysh>i)) ++ans;}cout<<ans<<endl;return 0;
}

https://www.acwing.com/problem/content/4892/

解法有点花里胡哨,二进制枚举+差分

鉴于范围很小,m台空调就用长度为m的二进制数表示,第i个位置有1,就代表第i个空调打开,所以总的有\(2^m\)个方案,从0枚举到\(2^m-1\)

因为降温都相同,所以可以用差分处理,最后从头开始累加,检验每个位置是否满足要求

点击查看代码
#include<bits/stdc++.h>using namespace std;int n,m;
const int maxn=22;
int stdtem[110];
struct node1{int a,b,p,m;
}kt[maxn];
int quick_pow(int a,int b){int ans=1;while(b){if(b&1) ans*=a;a*=a;b>>=1;}return ans;
}
int main(){cin>>n>>m;for(int i=1;i<=n;++i){int l,r,c;cin>>l>>r>>c;for(int i=l;i<=r;++i)    stdtem[i]=max(stdtem[i],c);}for(int i=0;i<m;++i)cin>>kt[i].a>>kt[i].b>>kt[i].p>>kt[i].m;int tot=quick_pow(2,m);int ans=1e9+10;for(int i=1;i<tot;++i){int tem[110],cnt=0;memset(tem,0,sizeof(tem));bitset<20>binary(i);for(int j=0;j<m;++j){if(binary[j]){tem[kt[j].a]+=kt[j].p;tem[kt[j].b+1]-=kt[j].p;cnt+=kt[j].m;}}int now=0;bool book=0;for(int i=1;i<=100;++i){now+=tem[i];if(now<stdtem[i]){book=1;break;}}if(!book) ans=min(ans,cnt);}cout<<ans<<endl;
}

AcWing 4905. 面包店

很有意思,遇到过好几次,不等式求交集
同时你会发现一点,时间越少,一定越能满足客人要求

但是这里有个问题在于有两个变量.

这个时候二分就能妙用,二分减少的总时间z,设减少其中一种制备饼干的时间为x,则另一种减少制备饼干的时间为z-x,解不等式,去检验制备饼干的时间x是否存在,存在则说明z比较还能减小

详细题解

点击查看代码
#include<bits/stdc++.h>using namespace std;
#define ll long long int t;
const int maxn=110;
int n;
int x,y;struct node{ll a,b,c;
}e[maxn];
bool check(ll mid){ll minn=max(0ll,1+mid-y),maxx=min(mid,x-1ll);for(int i=1;i<=n;++i){long double l=e[i].b-e[i].a;long double r=e[i].c-(long double)e[i].a*x-(long double)e[i].b*(y-mid);if(l==0 && r<0) return false;else if(l>0) maxx=min(maxx,(ll)floor(r/l));else if(l<0) minn=max(minn,(ll)ceil(r/l));}return minn<=maxx;
}
void solve(){cin>>n>>x>>y;for(int i=1;i<=n;++i) cin>>e[i].a>>e[i].b>>e[i].c;ll l=0,r=x+y-2;while(l<=r){ll mid=(l+r)>>1;if(check(mid)) r=mid-1;else l=mid+1;}cout<<l<<endl;return ;
}
int main(){cin>>t;while(t--){solve();}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

URAT协议自学笔记

定义 URAT(Universal Asynchronous Receiver/Transmitter)协议是一种通用异步收发传输协议,用于在两个设备之间进行串行数据通信。它将并行数据转换为串行数据进行传输,接收时再将串行数据转换为并行数据。 特点 异步通信:不需要共享时钟信号,通过波特率同步数据传输。 全…

解决手机每次复制都弹出google的nearby服务-分享到附近的设备

起因: 我的手机刷了国际版的系统,有google套件,每次复制都会唤起nearby附近分享这个组件,感觉很烦。 解决方法: 下载AppOps,这个软件能方便我们管理和监视应用权限。 使用Shizuku授权点击左上角,选择使用情况历史点击剪切板我们切出去, 在别的应用中进行一次复制,就可…

neo4j community教程

neo4j community最新版本安装教程(2025.1) 前言 ​ neo4j desktop以交互性好,体验好为优点。但是自24年中旬neo4j官网先后被墙和neo4j desktop联网打不开等诸多问题,本文作者建议使用community版本。 正文下载安装包neo4j官网,下载community最新版本(5.26.1)jdk-23下载(这…

代码随想录第四天 | Leecode 24. 两两交换链表、19.删除链表的倒数第N个节点、 面试题 02.07. 链表相交 、142.环形链表II

Leecode 24. 两两交换链表 题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 题目描述:思路:虚拟头节点,注意保存临时节点 题目解答: 循环结束的时候就是,当链表偶数个时cur->next->next=NULL,奇数个时cur->next=NULL。 Leecode 19. 删…

JpaSpecificationExecutor :Spring Data JPA 动态查询的核心扩展

JpaSpecificationExecutor 是 Spring Data JPA 动态查询的核心扩展,通过 Specification 机制提供灵活的类型安全查询,解决了传统 JPQL 或 Criteria API 的冗余问题,特别适合复杂业务场景下的动态数据访问需求。 核心设计目标: ​动态查询:允许运行时动态构建查询条件,避免…

四款高效报表软件推荐 助力企业数据可视化

概述 在数字化时代,企业和组织越来越依赖数据驱动决策,报表软件成为提高数据可视化能力、优化业务管理的关键工具。本文将为大家介绍四款功能强大的报表软件,帮助不同需求的企业找到合适的解决方案。 一、山海鲸报表 山海鲸报表是一款零代码的免费数据可视化和报表生成工具,…

AMDGPU对CUDA支持方式的分析

AMDGPU对CUDA支持方式的分析 实现方式是针对HIP API(Heterogeneous-Computing Interface for Portability)做CUDA的接口套壳,即将cuda的API接口作为标准接口,用AMD ROCm实现cuda的API(目的就是保证对外的API与CUDA完全相同),但实际调用 HIP+ROCm 的相关接口实现(即实际…

AMD GPU平台简单分析

AMD GPU平台简单分析 在启动docker的测试命令中,传入一个设备参数--device=/dev/kfd,转到DOCKER环境,kfd表示AMDGPU异构计算的GPU设备驱动(KMD)的设备节点,它是用户操作GPU的基础。AMD GPU设备驱动流程简单分析,如图1-19所示。图1-19 AMD GPU设备驱动流程简单分析 AMDKF…

Javascript - 3

Javascript - 3 背后的运行原理High levelGarbage-collectedjs引擎内部的算法,为了不被不必要的东西堵塞,会从计算机内存中 自动删除旧的、未使用的对象解释型的 / 即时编译的语言(为了更快做出的调整) interpreted or just-in-time compiled通过 解释器(Interpreter) 逐行…

GPU学习笔记

从引言中“Dennard Scaling”的失效开始,引入GPU出现的背景,又介绍了GPU的通用性,以及高并发、低延迟保证的高计算速度。随后,我们以最常见的CUDA为例,介绍了GPU编程的基础,SIMT与SIMD,编译链接的过程。最后,我们深入硬件层面,分为三步走,先用最简系统“run起来”,然…

信创邮箱了解一下

企业微信后台,邮箱模块突然多了 【信创邮箱】这模块,让我们了解一下信创邮箱。一、信创邮箱的定义 信创邮箱,全称“信息技术应用创新邮箱”,是指基于信创全生态打造的企业邮箱服务。它遵循“信息技术安全创新”(简称“信创”)原则,采用国内自主研发的技术和方案实现信息…

小了 60,500 倍,但更强;AI 的“深度诅咒”

作者:Ignacio de Gregorio图片来自 Unsplash 的 Bahnijit Barman几周前,我们看到 Anthropic 尝试训练 Claude 去通关宝可梦。模型是有点进展,但离真正通关还差得远。 但现在,一个独立的小团队用一个只有一千万参数的模型通关了宝可梦,比主流前沿 AI 模型小了几千倍。 举个…