首页 > 其他分享 >面向前方

面向前方

时间:2024-07-23 09:08:06浏览次数:8  
标签:machine le int facing forward 面向 cows 前方

[USACO07MAR] Face The Right Way G

题目描述

Farmer John has arranged his N (1 ≤ N ≤ 5,000) cows in a row and many of them are facing forward, like good cows. Some of them are facing backward, though, and he needs them all to face forward to make his life perfect.

Fortunately, FJ recently bought an automatic cow turning machine. Since he purchased the discount model, it must be irrevocably preset to turn K (1 ≤ K ≤ N) cows at once, and it can only turn cows that are all standing next to each other in line. Each time the machine is used, it reverses the facing direction of a contiguous group of K cows in the line (one cannot use it on fewer than K cows, e.g., at the either end of the line of cows). Each cow remains in the same *location* as before, but ends up facing the *opposite direction*. A cow that starts out facing forward will be turned backward by the machine and vice-versa.

Because FJ must pick a single, never-changing value of K, please help him determine the minimum value of K that minimizes the number of operations required by the machine to make all the cows face forward. Also determine M, the minimum number of machine operations required to get all the cows facing forward using that value of K.

\(N\) 头牛排成一列 \(1 \le N \le 5000\)。每头牛或者向前或者向后。为了让所有牛都面向前方,农夫每次可以将 \(K\) 头连续的牛转向 \(1 \le K \le N\),求使操作次数最小的相应 \(K\) 和最小的操作次数 \(M\)。\(F\) 为朝前,\(B\) 为朝后。

请在一行输出两个数字 \(K\) 和 \(M\),用空格分开。

输入格式

Line 1: A single integer: N

Lines 2..N+1: Line i+1 contains a single character, F or B, indicating whether cow i is facing forward or backward.

输出格式

Line 1: Two space-separated integers: K and M

样例 #1

样例输入 #1

7
B
B
F
B
F
B
B

样例输出 #1

3 3

提示

For K = 3, the machine must be operated three times: turn cows (1,2,3), (3,4,5), and finally (5,6,7)

主要是枚举,还有前缀和优化区间修改,还有注意边界讨论和特殊情况 !!!!!

AC code:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=5009;
int a[MAXN],b[MAXN];
int main()
{
    int n;
    cin>>n;
    getchar();
    for(int i=1;i<=n;i++)
    {
        char c=getchar();
        getchar();
        a[i]=c=='F'?1:0;
    }
    //初始化这个队列
    // 这个题目需要的是枚举所有的区间
    //但是注意,题目要找的是最小次数
    int k=INT_MAX,m=INT_MAX;
    for(int _=1;_<=n;_++)//代表区间的长度
    {
        //现在就要统计出现的次数
        memset(b,0,sizeof(b));
        int i=1,cnt=0;
        bool OK=true;
        while(i<=n)
        {
            b[i]+=b[i-1];


            if((a[i]==1&&b[i]%2==0)||(a[i]==0&&b[i]%2==1))i++;
            else
            {
                //为零,需要翻转
                b[i]+=1;
                b[i+_]-=1;
                if(i+_>n+1)
                {
                    OK=false;
                    break;
                }
                cnt++;
                i++;
            }
        }
        if(cnt<m&&OK)
        {
            m=cnt;
            k=_;
        }
    }
    cout<<k<<' '<<m<<endl;
    return 0;
}

标签:machine,le,int,facing,forward,面向,cows,前方
From: https://www.cnblogs.com/cxjy0322/p/18317513

相关文章

  • python面向对象三大特性(继承、多态、封装)之继承
    来吧,下面来具体说一下面向对象的三大特性:所谓封装、多态和继承。我们先来说一下继承。所谓继承,顾名思义,子类继承父类的属性,包括数据属性和函数属性。写个简单的例子吧:1.简单的继承classAnimal:need_substance='water'def__init__(self):print('这是一......
  • 模块2 面向对象编程初级 --- 第四章:创建类
    第四章 创建类主要知识点:1、类的定义2、类的修饰学习目标:掌握类的定义方法,能够编写简单的类。4.1类的定义问题空间元素在方法空间中的表示称为对象,面向对象的程序设计是以解决的问题中所涉及到的各种对象为主要考虑因素,更加贴近于人的思维方式,面向对象程......
  • 单位网络监控软件中的Pharo面向对象编程
    Pharo是一种现代化的面向对象编程语言,基于Smalltalk语言的理念。在单位网络监控软件的开发中,Pharo提供了强大的面向对象功能,可以帮助开发者更好地组织和管理代码。在本文中,我们将探讨Pharo语言在网络监控软件中的应用,并提供一些代码示例。Pharo的基本概念Pharo是一种动态......
  • 【系统架构设计师】十四、软件架构的演化和维护(演化和定义|面向对象软件架构演化过程
    目录一、软件架构演化和定义二、面向对象软件架构演化过程2.1 对象演化2.2消息演化2.3 复合片段演化2.4约束演化三、软件架构演化方式的分类 3.1软件架构静态演化3.2 静态演化的原子演化操作3.2.1 与可维护性相关的架构演化操作3.2.2 与可靠性相关的架构演......
  • java面向对象进阶篇--《继承》(万字总结,建议收藏)
    一、前言java部分连载开始,继续开始我们的java篇,前几天一直在调节web项目,刷了点力扣的题,导致java篇拉下了点。希望大家支持一下作者,制作不易。支持一下吧(#^.^#)---------------------------------------->点我❥(^_-) 二、java继承的概念和特点Java中的继承结构指的是通......
  • 第九章面向对象程序设计
    两大编程思想面向过程功能上的封装,典型代表:C语言面次对象属性和行为上的封装:典型代表Java和Pathon步骤确定:面向过程类和对象类:由N多个对象抽取出‘像’的属性和行为从而归纳总结出来的一种类别在Pathon中一切皆对象点击查看代码示例9-1查看对象的数据类型a=10b......
  • TypeScript与面向对象编程
    引言TypeScript简介TypeScript是JavaScript的一个超集,由微软开发,它在JavaScript的基础上添加了类型系统和对ES6+的新特性的支持。TypeScript最终会被编译成纯JavaScript代码,以便在任何支持JavaScript的环境中运行。面向对象编程(OOP)概念面向对象编程是一种编程范式,它使用“......
  • 面向对象设计的原则有哪些?
    1、单一责任原则(SingleResponsibilityPrinciple,SRP)一个类应该仅有一个引起它变化的原因。换句话说,一个类应该只有一个职责。这有助于保持类的内聚性,降低耦合度。2、开放-封闭原则(Open-ClosePrinciple,OCP)软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改的。......
  • Python第九章(面向对象基础--属性,继承,dir查看,内存地址,权限等等和银行账户题目,圆的面积
    面向对象创造对象示例代码:类的名字用小驼峰命名法#编写Person类classPerson():passclassCat:#,小括号可以省略pass#对象名=类名per=Person()c=Cat()#小括号不能省略print(type(per))print(type(c))代码结果:<class'__main__.Person'><class'__mai......
  • 模块1 课程准备 --- 第三章:建立面向对象的编程思想
    第三章建立面向对象的编程思想主要知识点:1、理解面向对象编程的基本思想。2、掌握面向对象编程的一般方法。3、能够运用Java语言编写简单的应用程序。学习目标:掌握面向对象编程的基本思想解释:面向过程编程从解决每一个步骤入手,适合于解决比较小的简......