USACO 奶牛排队

题目:给出一个只含有1,2,3的数字序列,问最少交换多少次才能将之变为递增数列。

解:

  注意到只有1,2,3,我们只要将1,3交换到自己的应在位置上那么排序就已经完成了。

  需要交换的有几种,记$a(x,,y)$表示x在应该是y的位置上的$a(i)$的个数,那么我们优先交换a(1,3)和a(3,1)里的数字,一次交换扳正两个位置,接下来要想扳正一个1或3的位置就必须要进行一次交换操作。

  统计计算即可。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5
 6 #define N 1010
 7
 8 using namespace std;
 9
10 int n,ans;
11 int cnt[4][4],a[N],b[N];    //cnt(i,j) it should be i,but it‘s j.
12
13 int main(){
14     freopen("privc.in","r",stdin);
15     freopen("privc.out","w",stdout);
16     cin>>n;
17     for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];
18     sort(b+1,b+n+1);
19     for(int i=1;i<=n;i++) cnt[b[i]][a[i]]++;
20     int t=min(cnt[1][3],cnt[3][1]);
21     ans+=t;
22     ans+=max(cnt[1][3]-t,cnt[3][1]-t);
23     ans+=cnt[1][2];
24     ans+=cnt[3][2];
25     cout<<ans<<endl;
26     fclose(stdin);
27     fclose(stdout);
28     return 0;
29 }

时间: 2025-01-09 06:31:31

USACO 奶牛排队的相关文章

NOIP2012模拟试题 121105【奶牛排队(tahort)

3.奶牛排队(tahort) [ 问题描述] 奶牛在熊大妈的带领下排成了一条直队. 显然,不同的奶牛身高不一定相同…… 现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的B是最高的,且B高于A奶牛,中间如果存在奶牛,则身高不能和A.B奶牛相同.问这样的奶牛最多会有多少头? 从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是0,2,但不会是1). [输入] 第一行一个数N (2≤N≤l00000),表示奶牛的头数. 接下来N个数,每行一个数,从上到下

笔试算法题目,奶牛排队喝水

import java.util.*; /**  * Created by Daxin on 2017/8/19.  * <p/>  * 奶牛排队饮水问题  * 输入:n牛的数目,然后n个整数表示牛的序号  * 输出:输出交换最少次数  * <p/>  * 例如一个测试用例:9<br>  * 2,2,1,3,3,3,2,3,1<br>  * 输出:4  *  *在线题目地址:http://www.hustoj.com/oj/problem.php?id=10

[USACO]奶牛会展(背包)

[USACO]奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由于负的智商或情商会造成负面效果,所以贝西不希望出展奶牛的智商之和小于零,或情商之和小于零.满足这两个条件下,她希望出展奶牛的智商与情商之和越大越好,请帮助贝西求出这个最大值. 输入输出格式 输入格式: ? 第一行:单个整数N,1 ≤ N ≤ 400 ? 第二行到第N + 1 行:第i + 1 行有

USACO 奶牛食品(网络流)

题目大意: FJ的奶牛们只吃各自喜欢的一些特定的食物和饮料,除此之外的其他食物和饮料一概不吃.某天FJ为奶牛们精心准备了一顿美妙的饭食,但在之前忘记检查奶牛们的菜单,这样显然是不能不能满足所有奶牛的要求.但是FJ又不愿意为此重新来做,所以他他还是想让尽可能多的牛吃到他们喜欢的食品和饮料. FJ提供了F (编号为1.2.-.F)种食品并准备了D (编号为1.2.-.D)种饮料, 他的N头牛(编号为1.2.-.N)都已决定了是否愿意吃某种食物和喝某种饮料.FJ想给每一头牛一种食品和一种饮料,使得尽可

WOJ1109 奶牛排队

题目链接: WOJ1109 题目描述: 奶牛在熊大妈的带领下排成了一条直队. 显然,不同的奶牛身高不一定相同-- 现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的B是最高的,且B高于A奶牛,且中间如果存在奶牛,则身高不能和A.B奶牛相同,的这样的一些奶牛最多会有多少头. 从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是0.2,但不会是1). 输入 第一行一个数N(2<=N<=100000),表示奶牛的头数. 接下来N个数,每行一个数,从上到下

奶牛排队

题意 [问题描述] 奶牛在熊大妈的带领下排成了一条直队. 显然,不同的奶牛身高不一定相同…… 现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A 是最矮的,最右边的B 是最高的,且B 高于A 奶牛, 且中间如果存在奶牛,则身高不能和A.B 奶牛相同, 问这样的一些奶牛最多会有多少头. 从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是零.二,但不会是一). [输入格式] 第一行一个数N(2<=N<=100000),表示奶牛的头数. 接下来N 个数, 每行一个数,

BZOJ 1666 Usaco 奶牛的数字游戏

1 #include <cstdio> 2 #include <algorithm> 3   4 int n; 5 int tot; 6   7 int main(){ 8     scanf("%d",&n); 9     while(n!=1){ 10         if(n%2!=0){ 11             n=n*3+1; 12             tot++; 13         } 14         else if(n%

USACO翻译:USACO 2013 DEC Silver三题

USACO 2013 DEC SILVER 一.题目概览 中文题目名称 挤奶调度 栅栏油漆 奶牛排队 英文题目名称 msched paint lineup 可执行文件名 msched paint lineup 输入文件名 msched.in paint.in lineup.in 输出文件名 msched.out paint.out lineup.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比较 二.运

USACO翻译:USACO 2013 JAN三题(1)

USACO 2013 JAN 一.题目概览 中文题目名称 镜子 栅栏油漆 奶牛排队 英文题目名称 mirrors paint lineup 可执行文件名 mirrors paint lineup 输入文件名 mirrors.in paint.in lineup.in 输出文件名 mirrors.out paint.out lineup.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比较 二.运行内存限制