题目链接:http://poj.org/problem?id=3276

题意:n牛头排成一排,每头牛两个状态,向前或向后,为了让所有的牛都向前,现在有一个机器 每次 能控制连续K头牛转换自己的状态,求让所有牛都向前的最少操作次数,以及对应的K值;

同一头牛翻转的次数为偶数时,相当于没有翻转;我们可以枚举所有的K,看是否能让所有的牛都面向前,当K一定时,先考虑最左端的牛,如果这头牛已经面向前的,无需翻转,否则翻转,

当左到右的操作之后我们就可以不用考虑左端的情况了;我们用f[i]表示区间[i, i+k-1]的牛是否被翻转;(1翻转,0不翻转);

当看第i头牛的状态时,因为第i头牛是和前面k-1头牛的翻转次数总和有关的,所以如果sum( f[i-k+1] 到 f[i-1] )是否为奇数,说明当前状态与初始状态相反,偶数状态不变;

求和的过程可以优化,所以总的时间复杂度为n*n; 

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<math.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 202550
#define PI 4*atan(1.0)
#define mod 100000001
#define met(a, b) memset(a, b, sizeof(a))
typedef long long LL; int n, dir[N], f[N]; int solve(int k)///判断连续翻转k头牛是否可行;
{
met(f, );///f[i]表示区间i----i+k-1的牛是否翻转; int sum = , cnt = ;///sum表示当前牛被翻转了多少次,等于前k-1个牛的翻转次数和;
for(int i=; i+k-<=n; i++)
{
if((sum+dir[i])%)///如果当前牛的方向是向后;
{
f[i] = ;///翻转i---i+k-1;
cnt ++;
}
sum += f[i];
if(i-k+>)///去除之前的影响;
sum -= f[i-k+];
}
for(int i=n-k+; i<=n; i++)///每次都会剩下不足k个(k-1个)的牛,然后检查这些牛的方向是否向前;
{
if((sum+dir[i])%)///如果当前牛的方向是向后;说明k值不可以,返回-1;
return -;
if(i-k+ > )
sum -= f[i-k+];
}
return cnt;
} int main()
{
while(scanf("%d", &n) != EOF)
{
met(dir, );///0向前,1向后;
for(int i=; i<=n; i++)
{
char s[];
scanf("%s", s);
if(s[] == 'B') dir[i] = ;
}
int K = , Min = n; for(int k=; k<=n; k++)
{
int ans = solve(k);
if(ans == -) continue;
if(ans < Min)
{
Min = ans;
K = k;
}
}
printf("%d %d\n", K, Min);
}
return ;
}

Face The Right Way---hdu3276(开关问题)的更多相关文章

  1. 手游聚合SDK开发之远程开关---渠道登入白名单

    白名单有啥好说的呢?无非就是筛选登入,大家第一眼看到就是这个印象,白名单也是有文章的,弄的时机不同会给你带来很不错的收益,注意是收益.还是举例来说,游戏上线前渠道都会做一个预下载,一般提前1-2天,这 ...

  2. TYPESDK手游聚合SDK客户端远程开关:渠道支付黑名单

    渠道支付要做开关干嘛用呢?为什么要做这种东西呢? 这个教训来分享一下,我们的游戏上线公测了,59个渠道首发,其中包括了应用宝,UC,360等的大渠道,也包含有一些工会渠道和小渠道,上线后一切正常,但是 ...

  3. iOS系列 基础篇 09 开关、滑块和分段控件

    iOS系列 基础篇 09 开关.滑块和分段控件 目录: 案例说明 开关控件Switch 滑块控件Slider 分段控件Segmented Control 1. 案例说明 开关控件(Switch).滑块 ...

  4. Context值和bool开关

      Context值和bool开关的相关内容 Context值分为2种 系统默认的context值 服务的context值 Context值的作用 主要是防止有未知文件进入目录文件之中(如将病毒拷贝到 ...

  5. 多线程、委托、Invoke解决winform界面卡死的问题,并带开关

    一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义 ...

  6. 替代jquery1.9版本以前的toggle事件函数(开关)

    以上文章为转载自http://blog.sina.com.cn/s/blog_50042fab0101c7a9.html var flag=1; $(".selector").cl ...

  7. Android自定义控件7--自定义开关--绘制界面内容

    本文实现全自定义控件--自定义开关 本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,转载请注明源地址. 自定义开关 (View),本文完成下面内 ...

  8. .NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)

    阅读目录: 1.背景介绍 2.在业务层中加入核心领域模型(引入DomainModel,让逻辑.数据有家可归,变成一个完整的业务对象) 3.统一协调层Application Layer(加入协调层来转换 ...

  9. asp.net mvc后台操作之读写xml控制首页动态页面开关显示

    一.背景 在asp.net mvc项目里,用户需要开拓几个活动版面,并以侧栏的方式呈现在首页右侧,几个活动时间不一致,为避免浏览者在活动未开放之时进入未开放的服务页面.因此不仅需要在活动代码中加入限制 ...

  10. 然当装入Ubuntu双系统时,会出现无线硬件开关关闭的问题,当然也就无法连网

    rfkill list all 会出现如下提示 0:ideapad_wlan: Wireless LAN      Soft blocked: no      Hard blocked:yes     ...

随机推荐

  1. 【BZOJ】2178: 圆的面积并

    http://www.lydsy.com/JudgeOnline/problem.php?id=2178 题意:给出n<=1000个圆,求这些圆的面积并 #include <cstdio& ...

  2. 实现自己的Linq to Sql

    之前写过一篇<统一的仓储接口>,为了方便使用不同的仓储.在我们的项目中使用的是EF4.0,但是这个版本的EF有一些性能问题没有解决,又不想升级到EF6,具体EF6有没有解决暂时不清楚.我们 ...

  3. jq实现多banner效果图

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  4. java web工程之Hibernate

    java web添加structs特性后再添加Hibernate特性,这可以通过右键工程->my eclipse出现工具条选中相应的条目,添加相应的属性, 添加完Hibernate后建立与数据库 ...

  5. php 获取当前脚本的url的案例

    关于用php 获取当前脚本的url很多朋友会说很简单,但是要获取很详细的就要经过多次判断. $PHP_TIME = time();$PHP_SELF = isset($_SERVER['PHP_SEL ...

  6. java语法基础思维导图

  7. ASP.NET MVC4系列验证机制、伙伴类共享源数据信息(数据注解和验证)

    一,mvc前后台验证 自定义属性标签MyRegularExpression using System; using System.Collections.Generic; using System.C ...

  8. HDU 1058 优先队列or堆

    本来应当是一道优先队列或者堆的题 因为每个数都应该是已经得到的数*2 *3 *5 *7而得到的 但是 2*7 大于 3*2 这就必须保证每次取得都是没有拿过的最小的数 但是它主动降低难度在样例里卖了个 ...

  9. 获取android设备的IP

    public class IPAddressUtils { public static String getLocalIpAddress() { try { String allIP = " ...

  10. 20145317彭垚 《Java程序设计》第10周学习总结

    20145317彭垚 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网 ...