疫情当下,美帝又开始倒牛奶了,这一幕似曾相识啊~~~

这个题目非常的应景,又是美国佬的奶牛

【题目地址】

【一句话题意】

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的更多相关文章

  1. Linux上的文件查找工具之locate与find

    前言 Linux上提供了两款工具用于查找文件,一款是locate,另一款是find. locate的特点是根据已生成的数据库查找,速度较快,但是查找的是快照数据,不准确. 因此在日常使用中,为了准确性 ...

  2. Computer Vision_33_SIFT:An efficient SIFT-based mode-seeking algorithm for sub-pixel registration of remotely sensed images——2015

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  3. Storyboards Tutorial 03

    这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...

  4. 文件图标SVG

    ​<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ...

  5. [BZOJ1659][Usaco2006 Mar]Lights Out 关灯

    [BZOJ1659][Usaco2006 Mar]Lights Out 关灯 试题描述 奶牛们喜欢在黑暗中睡觉.每天晚上,他们的牲口棚有L(3<=L<=50)盏灯,他们想让亮着的灯尽可能的 ...

  6. BZOJ1638: [Usaco2007 Mar]Cow Traffic 奶牛交通

    1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 571  Solved: 199 ...

  7. BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛( dp )

    一道水 dp ...然后我一开始用 BFS ...结果 MLE 了... dp[ i ][ j ][ k ] 由它四个方向上的 k - 1 转移. -------------------------- ...

  8. BZOJ 3373: [Usaco2004 Mar]Lying Livestock 说谎的牲畜( 差分约束 )

    枚举每头牛, 假设它在说谎, 建图判圈就行了...为啥水题都没人来写.. --------------------------------------------------------------- ...

  9. 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通

    1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 618  Solved: 217 ...

随机推荐

  1. CICD | Jenkins & Gitlab集成:WebHook触发构建

    在上一篇博客中,我们学习了Jenkins的搭建和插件+流水线的基本使用方法,Jenkins极大地提升了部署效率. 最近想学习一下如何集成GitLab webhook,实现进一步解放双手,目标: 推送( ...

  2. 用斗地主的实例学会使用java Collections工具类

    目录 一.背景 二.概念 1.定义 2.方法 2.1.排序方法 2.2.查找/替换方法 三.斗地主实例 3.1.代码结构 3.2.常量定义 3.3.单只牌类 3.4.玩家类 3.5.主程序 四.深入理 ...

  3. ThinkPHP6.0 + Vue + ElementUI + axios 的环境安装到实现 CURD 操作!

    官方文档地址: ​ ThinkPHP6.0: https://www.kancloud.cn/manual/thinkphp6_0/1037479 ​ ElemetUI: https://elemen ...

  4. 关于adb命令的基本使用

    在我们使用adb命令之前,我们要安装一个安卓模拟器(夜神.逍遥.海马王......),这里以夜神安卓模拟器为准(个人推荐,没用过可以使用夜神模拟器). 进入夜神安卓模拟器官网:https://www. ...

  5. tomcat的安装部署(windows10)

    一.Tomact下载 地址:https://tomcat.apache.org/

  6. [每日一题2020.06.11]Codeforces Round #644 (Div. 3) H

    A-E见 : 这里 题目 我觉得很有必要把H拿出来单独发( 其实是今天懒得写题了 ) problem H 一个从 1 到 $ 2^m - 1$ 的长度为m的连续二进制序列, 删去指定的n个数, 问剩余 ...

  7. Ubuntu 20.04下源码编译安装ROS 2 Foxy Fitzroy

    ROS 2 Foxy Fitzroy(以下简称Foxy)于2020年6月5日正式发布了,是LTS版本,支持到2023年5月.本文主要根据官方的编译安装教程[1]完成,并记录编译过程中遇到的问题. 1. ...

  8. (六)TestNg中的软断言和硬断言

    原文链接:https://cloud.tencent.com/developer/article/1479172 前言 在执行自动化测试脚本的时候,我们需要自动判断测试脚本执行完成后的实际结果是否与预 ...

  9. 动作函数-web_submit_data

    web_submit_data("login.pl", "Action=http://127.0.0.1:1080/WebTours/login.pl", &q ...

  10. S7-200 PLC内部+5VDC电源的负载能力

    S7-200 PLC内部+5VDC电源的负载能力 S7-200 CPU模块提供DC5V和24V电源:当有扩展模块时,CPU通过I/O总线为其提供5V电源,所有扩展模块的SV电源消耗之和不能超过该CPU ...