USACO 2021 January Contest, BronzeProblem 3. Just Stalling题解 贪心 排序

48 篇文章 0 订阅

已经鸽了好久了写一篇题解把

题目描述

Farmer John 有N头奶牛(1≤N≤20),高度为a1…aN。他的牛栏有N个牛棚,高度限制分别为b1…bN(例如,如果b5=17,那么一头高度不超过17的奶牛可以住在牛棚5里)。Farmer John 有多少种不同的方式安排他的奶牛,使得每头奶牛均住在不同的牛棚里,并且使得每个牛棚的高度限制均得到满足?

输入

输入的第一行包含N。第二行包含N个空格分隔的整数a1,a2,…,aN。第三行包含N个空格分隔的整数b1,b2,…,bN。所有的高度和高度限制均在范围 [1,109]内。 

输出

输出 Farmer John 可以将每头奶牛安排到不同的牛棚里,使得每个牛棚的高度限制均得到满足的方法数。注意输出的数量可能需要使用 64 位整数型,例如 C++ 中的 long long。 

样例输入1
4
1 2 3 4
2 4 3 4
样例输入1
8

提示/说明

 在这个例子中,我们不能将第三头奶牛安排到第一个牛棚里,因为3=a3>b1=2。类似地,我们不能将第四头奶牛安排到第一或第三个牛棚里。
一种符合高度限制的安排方式为将奶牛1安排到牛棚1,奶牛2安排到牛棚2,奶牛3安排到牛棚3,奶牛4安排到牛棚4。

测试点性质:

  • 测试点 1-5 满足N≤8。
  • 测试点 6-12 没有额外限制。

思路:

这题真的不难,就是一个排列 

把奶牛身高排序,最高的先考虑

证明:如果先考虑最矮的,这头奶牛可以进入最低的也可以进入最高的牛棚

如果他进入了最高的牛棚,那最高的奶牛可能没地方去了

祖传小图~

显而易见,只有一种可能性,就是依次进入牛棚

那如果按照上面说的,先考虑最小的,让最小的进入最大的牛棚

那最高的奶牛就无地可住了[doge] 

 

证明了这个观点,接下来就是coding了~

因为代码不难,我就直接附上AC代码了

# include <iostream>
# include <cstdio>
using namespace std;
# define int long long
int a=2;
bool prime(int x){
	for (int i=2;i*i<=x;i++){
		if (x%i==0){
			return false;
		}
	}
	return true;
}
signed main(){
	while(1){
		if (prime(a)){
			printf("%lld ",a);
		}
		a++;
	}
	return 0;
}

 

 这题洛谷似乎没有(截止到发表日期)

 所以就不给AC记录了

制作不易,点个赞吧

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值