USACO07 MAR Face The Right Way G
疫情当下,美帝又开始倒牛奶了,这一幕似曾相识啊~~~
这个题目非常的应景,又是美国佬的奶牛
【题目地址】
【一句话题意】
N头牛排成一列1<=N<=5000。每头牛或者向前或者向后。
为了让所有牛都 面向前方,农夫每次可以将K头连续的牛转向1<=K<=N,
求操作的最少次数M和对应的最小K。
【Input】
第1行:单个整数:N
第2..N + 1行:第i + 1行包含单个字符F或B,指示母牛i面向前还是面向后。
【Output】
第1行:两个以空格分隔的整数:K和M
【Sample】
input
7
B
B
F
B
F
B
B
output
3 3
【分析&思路】
区间修改?
线段树、树状数组,暴力枚举01修改——boom
我们注意到每一个点只有两种状态0|1
那么如果修改两次的话就相当于没改咯
我们把区间分开考虑
怎么说
就是把最左边连续的一段进行操作变为全部向前
于是在后续的操作中我们duck不必再考虑前面的
这思路没啥问题,直接上暴力
#include <cstdio>
using namespace std;
int n, a[5005][5005], minn = 99999, step , pin;
int main(){
    scanf("%d",&n);
    for(int i = 1; i <= n; i++){
        char ch;
        getchar();
        ch = getchar();
        if(ch == 'B') a[0][i] = 0;
        else a[0][i] = 1;
    }
    for(int i = 1; i <= n; i++){
        step = 0;
        int flag = 0;
        for(int j = 1; j <= n; j++)
        a[i][j] = a[0][j];
        for(int j = 1; j <= n - i + 1; j++){
            if(!a[i][j]){
            for(int k = 0; k < i ; k++){
                a[i][j + k] ^= 1;
            }
            step++;
            if(step > minn) break;
            }
        }
        for(int j = n - i + 2; j <= n; j++){
            if(!a[i][j]){
                flag = 1;
                break;
            }
        }
        for(int j = 1; j <= n; j++)
        if(!flag) {
            if(minn > step)
            {
                minn = step;
                pin = i;
            }
        }
    }
    printf("%d %d", pin, minn);
    return 0;
}
然后……T掉了……
那么我们再来考虑优化的方法
类似于差分
在此,可能叫做“异或分”
记录区间长度为k
每次反转的时候更改标记为0或1
给两个区间分别异或
则不改变前后区间的相对状态
总的时间复杂度为\(O(n^2)\)
emmmmm就这样叭
代码非原创
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 10009;
int n;
bool A[maxn],B[maxn];
int main(){
    scanf("%d",&n);
    char ch;
    for(int i=1;i<=n;++i){
        cin>>ch;A[i]=ch=='B'?0:1;
    }
    int mincnt=0x7fffffff,anslen;
    for(int len=1;len<=n;++len){
        memset(B,0,sizeof B);
        bool b=0,flag=1;int cnt=0;//flag记录当前长度是否有解
        for(int i=1;i<=n;++i){//因为区间翻转只有状态0和1,所以用^代替+和-
            b^=B[i];//数组B为记录差分的数组
            if(!(A[i]^b)){//若当前位置为0
                if(i+len-1>n){flag=0;break;}//唯一的失败条件:一次翻转的长度大于剩余的长度
                b^=1,B[i+len]^=1;
                ++cnt;
            }
        }
        if(flag){if(cnt<mincnt)mincnt=cnt,anslen=len;}
    }printf("%d %d\n",anslen, mincnt);
}
USACO07 MAR Face The Right Way G的更多相关文章
- Linux上的文件查找工具之locate与find
		前言 Linux上提供了两款工具用于查找文件,一款是locate,另一款是find. locate的特点是根据已生成的数据库查找,速度较快,但是查找的是快照数据,不准确. 因此在日常使用中,为了准确性 ... 
- Computer Vision_33_SIFT:An efficient SIFT-based mode-seeking algorithm for sub-pixel registration of remotely sensed images——2015
		此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ... 
- Storyboards Tutorial 03
		这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ... 
- 文件图标SVG
		<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ... 
- [BZOJ1659][Usaco2006 Mar]Lights Out 关灯
		[BZOJ1659][Usaco2006 Mar]Lights Out 关灯 试题描述 奶牛们喜欢在黑暗中睡觉.每天晚上,他们的牲口棚有L(3<=L<=50)盏灯,他们想让亮着的灯尽可能的 ... 
- BZOJ1638: [Usaco2007 Mar]Cow Traffic 奶牛交通
		1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 571 Solved: 199 ... 
- BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛( dp )
		一道水 dp ...然后我一开始用 BFS ...结果 MLE 了... dp[ i ][ j ][ k ] 由它四个方向上的 k - 1 转移. -------------------------- ... 
- BZOJ 3373: [Usaco2004 Mar]Lying Livestock 说谎的牲畜( 差分约束 )
		枚举每头牛, 假设它在说谎, 建图判圈就行了...为啥水题都没人来写.. --------------------------------------------------------------- ... 
- 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通
		1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 618 Solved: 217 ... 
随机推荐
- Pycharm添加Python文件模板
			#!/usr/bin/env python# -*- encoding: UTF-8 -*-'''=================================================@P ... 
- pyhon的浅拷贝与深拷贝
			1.赋值:简单地拷贝对象的引用,两个对象的id相同. 2.浅拷贝:创建一个新的组合对象,这个新对象与原对象共享内存中的子对象. 3.深拷贝:创建一个新的组合对象,同时递归地拷贝所有子对象,新的组合对象 ... 
- vue对象数组数据变化,页面不渲染
			很多时候,我们习惯于这样操作数组和对象: data() { // data数据 return { arr: [1,2,3], obj:{ a: 1, b: 2 } }; }, // 数据更新 数组视图 ... 
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二)
			系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ... 
- kali设置NAT模式,无法正常上网请试试这个办法
			1.释放网卡: dhclient -r eth0 2.自动获取网络 dhclient -v eth0 3.开启22端口 lsof -i :22 4.打开ssh service ssh start sy ... 
- SQL Msg 18054, Level 16, State 1
			今天接到一个看起来很简单的任务--修改数据库中的一项数据.听起来很简单吧. 在网上搜索了一下,很快就拼凑出了相应的 SQL 语句: UPDATE [suivi].[dbo].[numSerie]SET ... 
- Fibonacci(模板)【矩阵快速幂】
			Fibonacci 题目链接(点击) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20989 Accepted: 14 ... 
- view中显示部分区域
			在android中有时候要求只显示view的部分区域,这个时候就需要对当前的view进行剪裁的操作.在android中剪裁当前的view的有两种方法:一种是直接截取view,第二种是通过Outline ... 
- ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)
			本文首发于“生信补给站”:https://mp.weixin.qq.com/s/8kz2oKvUQrCR2_HWYXQT4g 如果有maf格式的文件,可以直接oncoplot包绘制瀑布图,有多种展示和 ... 
- Redis进阶之使用Lua脚本自定义Redis命令
			[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 1.在Redis ... 
