USACO Bronze and Gold

Introduction:
此次bronze silver正常难度,gold拉满,platinum不清楚,总体来说似乎有一点点毒瘤。。。主要出题人是传说中的Benjamin Qi

Bronze T1
在这里插入图片描述

有一说一,这题基本上读的懂题学过算法的人都基本能完成的标准签到题。
题目大意就是给定7个数,分别为 A , B , C , A + B , B + C , A + C , A + B + C A, B, C, A+B, B+C, A+C, A+B+C A,B,C,A+B,B+C,A+C,A+B+C, 根据这个数列求出 A , B , C A,B,C A,B,C
具体做法就是从小到大排序,不妨令 A < = B < = C A<=B<=C A<=B<=C 于是 a 1 , a 2 a_1,a_2 a1,a2就分别为 A , B A,B A,B, 又因为 C = ( A + C ) + ( B + C ) − ( A + B + C ) C=(A+C)+(B+C)-(A+B+C) C=(A+C)+(B+C)(A+B+C), 所以同时我们能得出 C C C,然后你就愉快地拿到了100分

#include <bits/stdc++.h>
using namespace std;
int a[8];
int main()
{
	for (int i=1;i<=7;i++)
	{
		cin>>a[i]; 
	}    
	sort(a,a+7);					//排序
	cout<<a[1]<<" "<<a[2]<<" "<<a[5]+a[6]-a[7]<<endl;
	return 0;
}

Bronze T2

在这里插入图片描述

仔细看两眼,似乎还是一个签到题,比上一题还要无脑一些
题目大意就是给定每朵花的花瓣,让你找到有多少个区间,满足从 i − j i-j ij这个区间中至少有一朵花,这朵花的花瓣数量是这个区间内所有花的花瓣数量的平均值
于是直接无脑双重循环枚举即可

#include<bits/stdc++.h>
using namespace std;
const int maxn=10000005;
int n,cnt,a[maxn];
inline int check(int i,int j)
{
	int tot=0,avg;
	for (int k=i;k<=j;k++)
	{
		tot+=a[k];
	}
	avg=tot/(j-i+1);
	for (int k=i;k<=j;k++)
	{
		if (a[k]==avg)
		{
			return 1;
		}
	}
	return 0;
}
int main()
{
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for (int i=1;i<=n;i++)
    {
        for (int j=i;j<=n;j++)
        {
            if (check(i,j))
            {
                cnt++;
            }
        }
    }
    cout<<cnt<<endl;
    return 0;
}

Bronze T3

在这里插入图片描述

不多说,签到题++

题目大意:Farmer John有一些奶牛,朝向为北方和东方,有一个无限大的草场,奶牛们会不停的吃草,如果她当前所在的方格里的草已经被其他奶牛吃掉了,则她会停下;否则她会吃完她当前所在的方格中的所有草,并向她朝向的方向移动一个方格。如果两头奶牛在一次移动中移动到了同一个有草的方格,她们会分享这个方格中的草,并在下一个小时继续沿她们朝向的方向移动,求出每头奶牛吃到的草的数量。有些奶牛永远不会停下,从而吃到无限多的草

于是我们可以将两个不同朝向的奶牛分开,进行排序,然后一一去比较即可。

代码略长不做展示(码风问题)

于是bronze我们就利用了30min AK了

Gold T1

这题其实说实话想较Gold的T2以及T3难度较低
题目大意:给定机器人可能起始位置以及地图。每过一个小时,所有的机器人可以像某一个方向同时移动一格,没过D小时,没给机器人会复制一个自己在自己的上下左右的空格,当机器人碰到岩石,繁殖停止。求某一个时刻含有机器人的方格的数量。

思路:首先我们不难发现,按照这种方式产生副本,最终的机器人的图案一定呈现一个菱形。
于是我们判断每个中心能达到的最大扩展范围,寻找距离此点最近的岩石即可。
于是思路就逐渐清晰了。
考虑用bfs实现
首先第一个bfs预处理出每个点离最近的石头的距离,也就是每个点可以接受的最大复制机器人次数的点。
接下来我们可以找出到达某个点的最短时间,再根据它与最近的石头的距离,判断它是否能成为顶点。
最后我们维护到每个点机器人可以展开的最多个数,最终维护可到达点即可。

代码就不放了(过长)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值