USACO 2024 Open Bronze铜组题解

迟到了一个月的题解......

Logical Moos:

啊这题放在铜组T1雀食有点BT......

首先,我们关注l前第一和r最后那两组。如果这俩有一个是true,那答案肯定也是true。

否则,在l和r外边的都是false。那我们就只用仔细看l和r中间的玩意儿。对于l和r中间的每一组,只要第一组和最后一组都是false,那结果肯定也是false。

所以:如果换掉的对最后结果木有影响,那就不管;如果有,就换。

对于true的查询,我们必须再次检查该段是否包含l这组的第一个false,以及r这组的最后一个false。如果不是,那么即使我们将其余部分替换为true,结果也将还是false。

对于false的查询,如果输入是false,结果将为false。

我们每次只需记录每组中最左的false和最右的false,复杂度\Theta (N+Q)

#include <bits/stdc++.h>
using namespace std;
string expr[maxn];
int group[maxn];
int main(){int N,Q;cin>>N>>Q;for(int i=0;i<N;i++)cin>>expr[i];int idx=0;for(int i=0;i<N;i++){if(expr[i]=="or")idx++;else{if(i%2==0)group[i]=idx;}}vector<int> first_false(idx+1,INF);vector<int> last_false(idx+1,-1);for(int i=0;i<N;i+=2){int g=group[i];if(expr[i]=="false"){if(first_false[g]==INF)first_false[g]=i;last_false[g]=i;}}int first_true=INF,last_true=-1;for(int i=0;i<=idx;i++){if(first_false[i]==INF){if(first_true==INF)first_true=i;last_true=i;}}while(Q--){int l,r;cin>>l>>r;--l;--r;string query;cin>>query;int gl=group[l],gr=group[r];if(first_true<gl || last_true>gr){cout<<(query=="true"?'Y':'N');continue;}if(query=="true")cout<<(first_false[gl]<l || last_false[gr]>r?'N':'Y');elsecout<<'Y';}return 0;
}

好长啊。。。

Walking Along a Fence:

我们用一个二维矩阵记录每个点沿栅栏的距离,我们按顺序读入栅栏,当我们这样做时,我们遍历栅栏上的每个点,在数组中标记每个点0,1,2,…;同时记录周长。由于篱笆最多访问每个点一次,时间复杂度为\Theta (L^2)

#include <bits/stdc++.h>
using namespace std;
const int MAX=200005;
struct loc{int x;int y;
}posts[MAX];
int perimeter,dist[1005][1005];
void walk(loc st,loc ed){diff.x=ed.x-st.x,diff.y=ed.y-st.y;int dis=abs(diff.x)+abs(diff.y);diff.x=diff.x/dis,diff.y=diff.y/dis;for(int i=0;i<dis;i++){dist[st.x][st.y]=perimeter;perimeter++;st.x=st.x+diff.x,st.y=st.y+diff.y;}
}
int main(){int N,P;cin>>N>>P;for(int i=0;i<P;i++)cin>>posts[i].x>>posts[i].y;for(int i=0;i<P;i++)walk(posts[i],posts[(i+1)%P]);for(int i=0;i<N;i++){int x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;int p1=dist[x1][y1];int p2=dist[x2][y2];int ans=abs(p1-p2);ans=min(ans,perimeter-ans);cout<<ans<<endl;}return 0;
}

Farmer John's Favorite Permutation:

Farmer Nhoj????????????????????????????????????????????????????????????

Emmmmmmmmmm,\Theta (N!)暴力的话肯定是不行的。那怎么办呢?

我们会发现,不管怎么动,1,永远不会动。所以,1,必然是那个活到最后的人。h_{N-1}=1。否则直接不可以总司令然后走人。

如果不是-1,我们就把最后一个从h里踢出去,不管它。

那p的最小字典序一定满足p_1<p_N。接下来,我们会想:只有一组这样的p吗?

我们知道,h都是不同的,看起来,如果存在一些映射到h的p,p必然是唯一的。

大家可以手推一下,把h和p都算出来,可以发现这两点:

        1. 每个h里的元素都是不同的

        2. p结尾的数正好是从h里消失的两个。

所以,只要确定了p结尾的数,就可以得出整个p。

#include <bits/stdc++.h>
using namespace std;
int main(){int T;cin>>T;while(T--){int N;cin>>N;vector<int> h(N-1);for(auto &x:h)cin>>x;vector<bool> has(N+1);for(int x:h)has[x]=true;vector<int> not_has;for(int i=1;i<=N;i++){if(!has[i])not_has.push_back(i);}int cnt_one=count(h.begin(),h.end(),1);if(not_has.size()>2 || h.back()!=1 || (not_has.size()==2 && cnt_one!=2)){cout<<-1<<endl;continue;}vector<int> p(N);if(not_has.size()==1){p[0]=1;p[N-1]=not_has[0];}else{p[0]=not_has[0];p[N-1]=not_has[1];}int l=0,r=N-1;for(int i=0;i<N-1;i++){if(p[l]>p[r])p[++l]=h[i];elsep[--r]=h[i];}for(int i=0;i<N;i++)cout<<p[i];cout<<endl;}return 0; 
}

好了,以上就是本期的全部内容了。我们下期再见!\(^o^)/~

友情提示:本期的代码都有问题,请不要无脑Ctrl C+Ctrl V

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

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

相关文章

机器学习中的GBDT模型及其优缺点(包含Python代码样例)

目录 一、简介 二、优缺点介绍 三、Python代码示例 四、总结 一、简介 GBDT&#xff08;Gradient Boosting Decision Tree&#xff09;是一种集成学习算法&#xff0c;被广泛应用于机器学习中的回归和分类问题。它由多个决策树组成&#xff0c;每个决策树都通过迭代逐渐提升…

libVLC 提取视频帧

在前面的文章中&#xff0c;我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。 libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow->winId()); 如果我们想要提取每一帧数据&#xff0c;将数据保存到本地&#xff0c;该如何操作呢&#x…

Mac上怎么合并多张图片?

Mac上怎么合并多张图片&#xff1f;上班过的小伙伴都应该知道&#xff0c;合并拼接图片是一件非常重要且经常需要使用到的图片处理技术&#xff0c;将多张图片合并拼成一张之后能够展现出更多的图片内容。在Mac电脑上&#xff0c;合并多张图片是一项常见的任务&#xff0c;无论…

MySQL——查询数据的处理

一、并列 连接两个数据列的值&#xff0c;并进行输出的格式化处理&#xff08;显示为一种统一的格式&#xff09; concat( 列 1 格式化字 符 ) mysql> select concat(vend_name, vend_country) from vendors; --------------------------------- | concat(vend_name, ve…

数据库面试题

文章目录 事务未提交和提交事务的4大特征事务的隔离级别并发事务的问题MVVCundo log 和 redo log记录的隐藏字段readview&#xff08;读视图&#xff09; 事务未提交和提交 事务未提交时数据存在于数据库系统的缓存中&#xff0c;而在事务提交后&#xff0c;数据才会被写入到磁…

吴恩达深度学习笔记:深层神经网络(Deep Neural Networks)4.5-4.8

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第四周&#xff1a;深层神经网络(Deep Neural Networks)4.5 为什么使用深层表示&#xff1f;&#xff08;Why deep representations?&#xff09; 第一门课&#xff1a;神经网络和深度学习 (…

突破编程_前端_SVG(基础元素介绍)

1 rect 矩形 在 SVG 中&#xff0c;<rect> 元素用于创建圆形。 &#xff08;1&#xff09;基本语法 <rectx"x坐标"y"y坐标"width"宽度"height"高度"rx"可选&#xff1a;圆角x半径"ry"可选&#xff1a;圆角…

AcWing 788. 逆序对的数量——算法基础课题解

AcWing 788. 逆序对的数量 文章目录 题目描述思路CGo模板 题目描述 给定一个长度为 n 的整数数列&#xff0c;请你计算数列中的逆序对的数量。 逆序对的定义如下&#xff1a;对于数列的第 i 个和第 j 个元素&#xff0c;如果满足 i<j且 a[i]>a[j]&#xff0c;则其为一…

数字电路基础(Digital Circuit Basis )

目录 一、什么是数字电路&#xff1f; &#xff08;Digital Circuit &#xff09; 1.概念 2.分类 3.优点 4.数电与模电的区别 二、数制 (十进制&#xff1a;Decimal) 1.概述 2.进位制 3.基数 4.位权 5.二进制的算术运算 三、编码 (二进制&#xff1a;Binary ) 1.什…

(源码+部署+讲解)基于Spring Boot和Vue的大学志愿者服务平台的设计与实现

摘要&#xff1a; 随着互联网技术的快速发展&#xff0c;大学校园内的志愿者活动日益增多&#xff0c;传统的志愿者管理方式已难以满足现代化、信息化的需求。因此&#xff0c;设计并实现一个基于Spring Boot和Vue的大学志愿者服务平台显得尤为重要。本文详细阐述了该平台的设计…

本地部署WebSocket服务端结合内网穿透实现公网远程即时通讯

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

【Web】纯萌新的CISCN刷题记录(1)

目录 [CISCN 2019华东南]Web11 [CISCN 2019华北Day2]Web1 [CISCN 2019初赛]Love Math [CISCN 2022 初赛]ezpop [CISCN 2019华东南]Double Secret [CISCN 2023 华北]ez_date [CISCN 2019华北Day1]Web1 [CISCN 2019华东南]Web4 [CISCN 2019华北Day1]Web2 [CISCN 2023 …