18.2.27USACO逃离铜组

2023-10-28 12:10
文章标签 逃离 18.2 27usaco 铜组

本文主要是介绍18.2.27USACO逃离铜组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 写在前面
  • T1
    • 题面
    • 描述
    • 题解
  • T2
    • 题面
    • 描述
    • 题解
  • T3
    • 题面
    • 描述
    • 题解
  • 总结

写在前面

高一下学期开始了。
第一天来到机房就开始了USACO铜组逃亡。。。
我还是很弱,铜组题也不能在规定时间内打完,还是开了个小号,听了第二题,才晋级的银组。。

T1

题面

Farmer John最讨厌的农活是运输牛粪。为了精简这个过程,他制造了一个伟大的发明:便便传送门!与使用拖拉机拖着装满牛粪的大车从一个地点到另一个地点相比,他可以使用便便传送门将牛粪从一个地点瞬间传送到另一个地点。

Farmer John的农场沿着一条长直道路而建,所以他农场上的每个地点都可以简单地用该地点在道路上的位置来表示(相当于数轴上的一个点)。一个传送门可以用两个数x和y表示,被拖到地点x的牛粪可以瞬间传送到地点y,反之亦然。

Farmer John想要将牛粪从地点a运输到地点b,他建造了一个可能对这一过程有所帮助的传送门(当然,如果没有帮助,他也可以不用)。请帮助他求出他需要使用拖拉机运输牛粪的总距离的最小值。

输入格式(文件名:teleport.in):
输入仅包含一行,为四个用空格分隔的整数:a和b,表示起始地点和结束地点,后面是x和y,表示传送门。所有的位置都是范围为0…100的整数,不一定各不相同。

输出格式(文件名:teleport.out):
输出一个整数,为Farmer John需要用拖拉机运输牛粪的最小距离。

输入样例: 输出样例:
3 10 8 2 3

在这个样例中,最佳策略是将牛粪从位置3运到位置2,传送到位置8,再运到位置10。 所以需要用拖拉机的总距离为1 + 2 = 3。

描述

仅一个传送门,能双向的从一个地方传到另一个地方,求a到b的最短路程。
只有一个传送门,只要考虑是否使用他就行了,若使用,就用a与最左端距离加上b与最右端距离,若不用,则直接a到b的距离。
比较水。

题解

#include<bits/stdc++.h>
using namespace std;
int s,e,x,y,ans;
int main()
{freopen("teleport.in","r",stdin);freopen("teleport.out","w",stdout);scanf("%d%d%d%d",&s,&e,&x,&y);if (x>y) swap(x,y);if (s>e) swap(s,e);ans=min(abs(x-s)+abs(y-e),e-s);printf("%d",ans);fclose(stdin);fclose(stdout);return 0;
}

T2

题面

为了准备即将到来的蹄球锦标赛,Farmer John正在训练他的N头奶牛(方便起见,编号为1…N,其中1≤N≤100)进行传球。这些奶牛在牛棚一侧沿直线排列,第ii号奶牛位于距离牛棚xi的地方(1≤xi≤1000)。每头奶牛都在不同的位置上。
在训练开始的时候,Farmer John会将若干个球传给不同的奶牛。当第i号奶牛接到球时,无论是从Farmer John或是从另一头奶牛传来的,她会将球传给最近的奶牛(如果有多头奶牛与她距离相同,她会传给其中距左边最远的那头奶牛)。为了使所有奶牛都有机会练习到传球,Farmer John想要确保每头奶牛都持球至少一次。帮助他求出为了达到这一目的他开始时至少要传出的球的数量。假设他在开始的时候能将球传给最适当的一组奶牛。

输入格式(文件名:hoofball.in):

输入的第一行包含N。第二行包含N个用空格分隔的整数,其中第i个整数为xi。
输出格式(文件名:hoofball.out):

输出Farmer John开始的时候最少需要传出的球的数量,使得所有奶牛至少持球一次。
输入样例:

5
7 1 3 11 4
输出样例:

2
在上面的样例中,Farmer John应该将球传给位于x=1的奶牛和位于x=11的奶牛。位于x=1的奶牛会将她的球传给位于x=3的奶牛,在此之后这个球会在位于x=3的奶牛和位于x=4的奶牛之间来回传递。位于x=11的奶牛会将她的球传给位于x=7的奶牛,然后球会被传给位于x=4的奶牛,在此之后这个球也会在位于x=3的奶牛和位于x=4的奶牛之间来回传递。这样的话,所有的奶牛都会至少一次接到球(可能从Farmer John,也可能从另一头奶牛)。

可以看出,不存在这样一头奶牛,Farmer John可以将球传给她之后所有奶牛最终都能被传到球。

描述

牛会传球,不断传来传去传给离自己最近的牛(若同样近给左边)。。。求需要几个球,能使所有牛都能参加游戏。
这题坑了我好久。。。
本来想着上升下降序列统计。
但怎么也过不去。。。
听了sj大佬的方法,我家的猫说:“miaoa”。
就是这图中肯定有环。而且环一定存在于相邻两个点。而且不可能有两个环相连,也就是一个强联通分量中只有一个环。
那么不管左边或右边向此环有多少个成链的点指向,都只需要一个球。
,而若两边都有指向此环,则需两球。

如图
这里写图片描述
记录每个点传球方向。再进行判断,就可以ac啦!!!

题解

#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
int a[110]={};
int sum[110]={};
int lr[110]={};
int main()
{freopen("hoofball.in","r",stdin);freopen("hoofball.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+n+1);for(int i=1;i<n;i++)sum[i]=a[i+1]-a[i];lr[1]=-1;lr[n]=1;for(int i=1;i<n-1;i++)if (sum[i]>sum[i+1]) lr[i+1]=-1;else lr[i+1]=1;for(int i=1;i<n;i++){if (lr[i]==-1&&lr[i+1]==1) {ans++;if (lr[i-1]==-1&&lr[i+2]==1) ans++;}}  printf("%d",ans);fclose(stdin);fclose(stdout);return 0;
}

T3

题面

一大清早,Farmer John就被木材破裂的声音吵醒了。是这些奶牛们干的,她们又逃出牛棚了!
Farmer John已经厌烦了奶牛在清晨出逃,他觉得受够了:是时候采取强硬措施了。他在牛棚的墙上钉了一个计数器,追踪从上次出逃开始经过的天数。所以如果某一天早上发生了出逃事件,这一天的计数器就为0;如果最近的出逃是3天前,计数器读数就为3。Farmer John一丝不苟地记录了每一天计数器的读数。

年末到了,Farmer John准备做一些统计。他说,你们这些奶牛会付出代价的!然而意想不到的是,他的记录的一些条目竟然丢失了!

Farmer John确信他是在发生出逃的某一天开始记录的。请帮助他确定,在所有与残留记录条目一致的事件序列中,基于记录的时间,最少和最多可能发生的出逃次数。

输入格式(文件名:taming.in):

输入的第一行包含一个整数NN(1≤N≤100),表示从Farmer John开始对奶牛出逃计数器进行计数以来已经经过的天数。
第二行包含N个空格分隔的整数。第i个整数是−1,表示第ii天的记录丢失了,或者是一个非负整数ai(不超过100),表示在第i天计数器的数字是ai。

输出格式(文件名:taming.out):

如果没有事件序列与Farmer John的残留记录以及他所确定的奶牛在第11天清晨出逃这一事实相一致,输出一个整数−1。否则,输出两个空格分隔的整数m和M,其中m为所有事件序列中出逃的最少次数,M为最多次数。
输入样例:

4
-1 -1 -1 1
输出样例:

2 3
在这个样例中,我们可以推断第3天必然有出逃发生。我们已经知道在第1天也发生了出逃,所以最后不确定的只有第2天是否发生了出逃。因此,总共发生了2至3次出逃。

描述

残缺的记录,记录了几天前有奶牛逃亡事件。
求发生逃亡事件可能最少数和可能最多数。
由于第一天一定有逃亡事件发生,那么一定是0;
然后后面每出现一个非-1数,就可以提供给我们两个信息。
1.ai天前确定发生了一个事件。
2.这ai天都没发生事件,否则计数器会刷新。
那么每获得一个非-1数,则可以更新summin;
最后得出没被确定的天数,加上summin就是所求summax;
还需要很多细节,特判等。。。
比如不符合逻辑时输出-1;

题解

#include<bits/stdc++.h>
using namespace std;
int n,summin=0,summax;
int a[110]={};
bool f[110]={};
int main()
{freopen("taming.in","r",stdin);freopen("taming.out","w",stdout);scanf("%d",&n);bool p=false;for(int i=1;i<=n;i++){scanf("%d",&a[i]);if (a[i]!=-1) p=true;}if (!p){printf("%d %d",1,n);fclose(stdin);fclose(stdout);return 0;}for(int i=n;i>=1;i--){if (a[i]!=-1&&f[i]==0){for(int j=i;j>=i-a[i];j--){f[j]=1;if (a[j]!=-1&&a[j]!=a[i]-i+j||a[i]>=i){cout<<-1;fclose(stdin);fclose(stdout);return 0;}}summin++;}}if (f[1]==0) summin++;for(int i=2;i<=n;i++)if (f[i]==0) summax++;printf("%d %d",summin,summin+summax);fclose(stdin);fclose(stdout);return 0;
}

总结

不能小看USACO的题目。
还是要多思考。
寒假结束了,把心收回来。

这篇关于18.2.27USACO逃离铜组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/293101

相关文章

逃离北京回家创业--生存篇

创业的路上,并不总是激情和乐趣。当激情过了,就需要面对赤裸裸的现实。 首先要考虑团队的开销问题,虽然大家拿的工资并不高,但是四个人的工资加上房租水电,对于一个穷苦出身的程序员来说也是个不小的压力。为了给团队找个能够发展下去的持续动力,我想了挺多的办法。 我们在大学城里面创业,大学生是很好的资源。我首先想到的是办培训,我反复思考,我觉得想到了一个非常理想的运作模式。我们创业缺少的是两

逃离北京回家创业--团队组建篇

筹划好了自己的创业项目,然后就开始着手组建团队了。考虑到自己没有太多的资金支持,不能可能去社会上招经验丰富的员工,于是决定自己培养团队。 好在我技术选择的是nodejs和mongodb,前后端都用js开发起来学习成本相对较低。我选择办公地点在大学城,一方面是考虑到这里的房租相对便宜,另一方面这里周边有十几所大学,组建团队也比较方便。大学生虽然不像社会上招的熟练技术人员效率那么高,但是我坚信大学生

hdu 1728 逃离迷宫(搜索:BFS+优先队列)

问在给定转弯次数内能不能到达终点 因为限制了转弯次数,所以要想到每次取转弯次数最小的情况 看了网上好多人都是BFS+DFS,找到某一方向后沿着方向一直走 但我是用优先队列解决,每次取出转弯次数最小的情况,当然这样会慢一些 解决第一次转弯不计次数的方法是判断四个方向是否能加入队列,能的话加入即可 代码如下: #include <queue>#include <cstdio>#in

成本高昂 硅谷创业公司逃离公共云

from:http://www.chinacloud.cn/show.aspx?id=13244&cid=11 在硅谷,科技创业公司往往通过云服务来发展自己的业务。这种云服务允许企业通过互联网即时获得所需计算能力,弗兰基尔在旧金山创建的MemSQL也不例外,租借的是云计算鼻祖亚马逊的云服务。 但今年5月,即MemSQL创建约两年后,弗兰基尔放弃了亚马逊云服务,将公司的运营转移到自己的还

集群 day-44 (集群介绍, 18.2 keepalived介绍, 18.3/18.4/18.5 用keepalived配置高可用集群 )

18.1 集群介绍 18.2 keepalived介绍 18.3 用keepalived配置高可用集群(上) 清空配置文件,粘贴模板 global_defs {notification_email {aming@aminglinux.com}notification_email_from root@aminglinux.comsmtp_server 127.0.0.1sm

hdu1728逃离迷宫 (利用最短路径思想+优先队列(BFS))

Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去。令人头痛的是,gloria是个没什么方向感的人,因此,她在行走过程中,

c++题目_守望者的逃离

题目描述 恶魔猎手尤迫安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去,到那时,岛上的所有人都会遇难:守望者的跑步速度,为17m/s, 以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔

文心一言 VS 讯飞星火 VS chatgpt (251)-- 算法导论18.2 4题

四、假设关键字 {1,2,…,n} 被插入一棵最小度数为 2 的空 B 树中,那么最终的B树有多少个结点?如果要写代码,请用go语言。 文心一言: B树(B-tree)是一种自平衡的树,常用于数据库和文件系统的索引结构。在B树中,每个节点最多有 m 个子节点(对于B树,m 是阶数,即节点的最大子节点数),并且每个非根节点至少有 ⌈m/2⌉ 个子节点(其中 ⌈x⌉ 表示不小于 x 的最小整数)。

HDU4524郑厂长系列故事——逃离迷宫(2013腾讯编程初赛5)(AC)

郑厂长系列故事——逃离迷宫 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1725    Accepted Submission(s): 796 Problem Description 郑厂长没变   还是那个假厂

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

二、请解释在什么情况下(如果有的话),在调用 B-TREE-INSERT 的过程中,会执行冗余的 DISK-READ 或 DISK-WRITE 操作。(所谓冗余的 DISK-READ ,是指对已经在主存中的某页做 DISK-READ 。冗余的 DISK-WRITE 是指将已经存在于磁盘上的某页又完全相同地重写一遍。)。如果要写代码,请用go语言。 文心一言: 在B树(B-Tree)中,当我们进