bzoj:1659: [Usaco2006 Mar]Lights Out 关灯

时间:2022-09-26 00:13:07

Description

奶牛们喜欢在黑暗中睡觉。每天晚上,他们的牲口棚有L(3<=L<=50)盏灯,他们想让亮着的灯尽可能的少。他们知道按钮开关的位置,但喜闻乐见的是他们并没有手指。你得到了一个长度为T(1<=T<=7)的插槽用以帮助奶牛们改变灯的状态。
 

Input

第一行,两个整数L和T。第二行给出一个长度为L的01串表示初始灯的状态,0表示灯是灭的,1表示灯是亮的。第三行给出一个长度为T的01串,表示你获得的插槽。

Output

第一行输出一个整数K,表示在满足亮着的灯最少的情况下,你要用插槽操作的次数。第二行到第K+1行,每行一个整数表示你的插槽使用的位置。
"K最小的解,并且满足解的字典序最大(即按钮开关的位置尽可能靠后)"
 

Sample Input

10 4
1111111111
1101

Sample Output

5
1
3
4
6
7

HINT

使用5次插槽

1111111111  初始状态

0010111111  对第一个位置使用插槽

0001101111  对第三个位置使用插槽

0000000111  对第四个位置使用插槽

0000011101  对第六个位置使用插槽

0000010000  对第七个位置使用插槽

可以证明这是满足字典序最小的最优解。

 
bzoj:1659: [Usaco2006 Mar]Lights Out 关灯
 
各自无脑地挂了很多发……QAQ
因为异或操作是符合交换律的,所以完全可以从左到右枚举每个按钮要不要按(一个位置最多按一次),然后维护一下字典序……
 
#include<cstdio>
#include<iostream>
using namespace std; int n,m;
int f[],t[],i;
char c[];
int pos[];
int ans[],xp,o=,sp=;
void u(){
if(sp>o) return;
o=sp;
for(i=;i<=o;i++) ans[i]=pos[i];
}
bool dfs(int yyt,int xx){
if (xx>xp) return ;
if (sp>o) return ;
if (yyt>n-m+){
for (i=yyt;i<=n;i++) if (f[i]) xx++;
if (xx>xp) return ;
u();
return ;
}
for (i=;i<=m;i++) f[yyt+i-]^=t[i];
pos[++sp]=yyt;
bool cmp=dfs(yyt+,xx+f[yyt]);
for (i=;i<=m;i++) f[yyt+i-]^=t[i];
sp--;
cmp|=dfs(yyt+,xx+f[yyt]);
return cmp;
}
int main(){
scanf("%d%d",&n,&m);
scanf("%s",c+);for (i=;i<=n;i++) f[i]=c[i]-;
scanf("%s",c+);for (i=;i<=m;i++) t[i]=c[i]-;
for (xp=;xp<=n;xp++) if (dfs(,)) break;
printf("%d\n",o);
for (i=;i<=o;i++) printf("%d\n",ans[i]);
}

bzoj:1659: [Usaco2006 Mar]Lights Out 关灯的更多相关文章

  1. &lbrack;BZOJ1659&rsqb;&lbrack;Usaco2006 Mar&rsqb;Lights Out 关灯

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

  2. Bzoj 1657&colon; &lbrack;Usaco2006 Mar&rsqb;Mooo 奶牛的歌声 单调栈

    1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 631  Solved: 445[Submi ...

  3. bzoj 1658&colon; &lbrack;Usaco2006 Mar&rsqb;Water Slides 滑水

    题解: 很神奇的做法,把点分成入度大于出度和入度小于出度两种. 然后入度大于出度的点必须走到某个点,所以排序贪心. #include<stdio.h> #include<iostre ...

  4. BZOJ 1657 &lbrack;Usaco2006 Mar&rsqb;Mooo 奶牛的歌声:单调栈【高度序列】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1657 题意: Farmer John的N(1<=N<=50,000)头奶牛整齐 ...

  5. bzoj 1657 &lbrack;Usaco2006 Mar&rsqb;Mooo 奶牛的歌声——单调栈水题

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1657 #include<iostream> #include<cstdio ...

  6. bzoj 1657&colon; &lbrack;Usaco2006 Mar&rsqb;Mooo 奶牛的歌声【单调栈】

    先考虑只能往一边传播,最后正反两边就行 一向右传播为例,一头牛能听到的嚎叫是他左边的牛中与高度严格小于他并且和他之间没有更高的牛,用单调递减的栈维护即可 #include<iostream&gt ...

  7. BZOJ1657&colon; &lbrack;Usaco2006 Mar&rsqb;Mooo 奶牛的歌声

    1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 489  Solved: 338[Submi ...

  8. 1657&colon; &lbrack;Usaco2006 Mar&rsqb;Mooo 奶牛的歌声

    1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 526  Solved: 365[Submi ...

  9. bzoj1722&colon; &lbrack;Usaco2006 Mar&rsqb; Milk Team Select 产奶比赛 树形dp

    题目链接 bzoj1722: [Usaco2006 Mar] Milk Team Select 产奶比赛 题解 dp[i][j][0 / 1] 以i为根的子数中 相邻点对选了j个的最大价值 代码 #i ...

随机推荐

  1. shell脚本中的反引号使用 &grave;

    反引号是~的英文切换 在shell脚本中,反引号允许将shell命令的输出赋值给变量. test=`date` 这样shell会执行反引号中的命令.并将执行的结果赋值给变量tests.

  2. 了解HTML表单之13个表单控件

    目录 传统控件 button select option optgroup textarea fieldset legend label 新增控件 datalist keygen output pro ...

  3. 【Problem solved】 error C2665&colon; &OpenCurlyDoubleQuote;loadimage”&colon; 2 个重载中没有一个可以转换所有参数类型

    选择“项目”菜单->项目属性->配置属性->常规->字符集,改为“未设置”即可.

  4. nodejs 实现 http proxy 透明转发

    这两天需要安装一个Linux虚拟机,接下来要通过 yum 来安装需要的软件. 因单位的网络需要通过代理才能访问外网,公司代理服务器:proxy.xxxx.com,给yum增加了proxy设置: # v ...

  5. Android App测试要点

         本文主要内容,转载自 http://www.51testing.com/html/04/344504-849373.html,      在这里,主要是整理一下app测试的总体思路,这里的a ...

  6. Task &&num;39&semi;&&num;39&semi; not found in root project &&num;39&semi;&ast;&ast;&ast;&&num;39&semi;&period;

    android编译app报错:Task '' not found in root project '***'.将build.gradle里的 if (gradle.gradleVersion > ...

  7. &lpar;2-2&rpar;SpringCloud-服务注册到Eureka Server集群并消费

    服务注册到Eureka Server集群 在(2-1)SpringCloue-Eureka实现高可用注册中心中我们搭建好了高可用的Eureka注册中心,下面我们要把服务注册到Eureka Server ...

  8. HDOJ 1297 Children’s Queue

    版权声明:来自: 码代码的猿猿的AC之路 http://blog.csdn.net/ck_boss https://blog.csdn.net/u012797220/article/details/3 ...

  9. 使用dd命令制作U盘启动盘wodim刻录光盘cd dvd

    首先格式化U盘:使用fdisk -l 查看U盘到挂载点,如我的为/dev/sdb1.卸载U盘,执行格式化命令:mkfs.vfat /dev/sdb1 然后重新挂载U盘,开始制作启动盘: 1.# dd  ...

  10. JBoss和tomcat的区别

    JBoss和tomcat的区别 注意JBoss和tomcat是不一样,JBoss是一个可伸缩的服务器平台,当你的EJB程序编制完成后,如果访问量增加,只要通过增加服务器硬件就可以实现多台服务器同时运算 ...