lamps解题报告
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  N个灯,编号1~N。有4个开关,和C次改变某个开关状态的机会,试问最终所有灯的亮灭情况可能有哪些?
    一号开关:改变所有灯的状态。
    二号开关:改变所有奇数号灯的状态。
    三号开关:改变所有偶数号灯的状态。
    四号开关:改变所有3K+1号灯的状态(k=0,1,2,…)。
  初始时,所有灯都是亮的。
【输入】
  第一行一个数,N。
  第二行一个数,C。
  后两行,每行有空格分割的一些数,以-1结尾,给出的是此题的“额外限制条件”:
    第三行所出现的数,表示编号为这些的灯最终应当处于“亮”的状态,即最后输出时这些位置的数字应当为1;
    第四行所出现的数,表示编号为这些的灯最终应当处于“灭”的状态,即最后输出时这些位置的数字应当为0。
【输出】
  所有符合题目要求的状态,每行一种状态,用N位的二进制数来表示所有灯的亮灭状态,从最高位到最低位依次是1号到N号灯。
  注意,请按照字典序输出。
【数据范围】
  N=10~100
  C=0~10000
【输入样例】
  10
  1
  -1
  7 -1
【输出样例】
  0000000000
  0101010101
  0110110110
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  如果直接记录所有灯的状态,那么状态数是2的100次方种,明显超空间。
  简单观察一下,这道题的灯可以分为6组,分别是除以6模0~5这六组。那么,一号开关就是6组全改变,二、三号开关则是分别改变奇数组和偶数组,四号开关则是仅仅改变3K+1对应的两组。这样一来,所有灯的状态总共只有64种。
  继续分析,四个开关,一个初始状态,那么显然我们可以拨动开关0~4次,分别是一个开关都不变直到四个开关都变,就只有这五种情况了。也就是说,C的值只有0~4是有意义的,而一旦比4大,就说明必然灯被拨动了两次,那么可以让C减去2,让这个灯不被这样毫无意义的“玩”,结果显然是一样的。
  至此,我们把N变成了6,C变成了0~4,这个模型显然就简单多了。那么,我们只要看看题目最后的限制条件啦~
  依旧是映射到1~6号灯所代表的这6组灯上即可,因此这里便可能直接导致题目无解喽~
  这就是本题的思路了,余下的就是编程实现细节,不予赘述。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  第四次AC,回顾自己这不到一个小时,我还真是“常怀懒惰之心”啊!
  两天没做题了,脑子又开始懒了,静不下心来细想,做得很慢错误也多。很简单的题,做的过程中犯了几个细节错误:
    1.第一次提交,把代码中main函数里第三个IMPOSSIBLE那种情况给忘了
    2.第二次提交,ok函数中if语句&运算的括号没加,导致运算符优先级错误
    3.第三次提交,main函数中最后一个循环并未使用kk来保证字典序输出

------------------------------------------------------------------------------------------------------------------------------------------------

【代码】

 /*
ID: icedrea1
PROB: lamps
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; // p[101100]: 1,2,5 closed, 3,4,6 openned
bool p[]; // p[k]: can walk to state k
bool d[]; // d[k]: state d is right
int r[],w[];
int mark[]; int N,C; void go(int k,int c) // walk c steps from state k
{
if(!c) // get a final state
{
p[k]=true;
return;
} int t;
t=k^; go(t,c-);
t=k^; go(t,c-);
t=k^; go(t,c-);
t=k^; go(t,c-);
} bool ok(int k) // return if the state is right
{
for(int i=;i!=;++i) // the lamps in group i
if(mark[i]!=- && (k&(<<i))!=(mark[i]<<i)) // the state of lamps in group i is right to mark[i]
return false;
return true;
} void print(ostream &out,int k)
{
bool t[];
for(int i=;i!=;++i) t[i]=k&(<<i);
for(int i=;i!=N;++i) out<<t[i%];
out<<endl;
} int main()
{
ifstream in("lamps.in");
ofstream out("lamps.out"); in>>N>>C; while(C>=) C-=; p[]=true;
go(,C);
int x,y;
for(int i=;i!=;++i) mark[i]=-;
for(in>>x;x!=-;in>>x)
{
y=(x-)%;
if(mark[y]==-) mark[y]=;
else if(mark[y]==)
{
out<<"IMPOSSIBLE"<<endl;
in.close(); out.close();
return ;
}
}
for(in>>x;x!=-;in>>x)
{
y=(x-)%;
if(mark[y]==-) mark[y]=;
else if(mark[y]==)
{
out<<"IMPOSSIBLE"<<endl;
in.close(); out.close();
return ;
}
}
//for(int i=0;i!=6;++i) cout<<"mark["<<i<<"]="<<mark[i]<<endl; bool t=false;
for(int kk=,k=;k!=;++k,kk=)
{
for(int i=;i!=;++i) kk+=((bool)(k&(<<i)))*(<<(-i-));
//cout<<"k= "; print(cout,k);
//cout<<"kk="; print(cout,kk);
//cout<<endl;
if(p[kk] && ok(kk)) { print(out,kk); t=true; }
}
if(!t) out<<"IMPOSSIBLE"<<endl; in.close(); out.close();
return ;
}

USACO Section2.2 Party Lamps 解题报告 【icedream61】的更多相关文章

  1. USACO Section2.1 The Castle 解题报告

    castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  2. USACO Section2.1 Ordered Fractions 解题报告

    frac1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  3. USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】

    holstein解题报告 --------------------------------------------------------------------------------------- ...

  4. USACO Section2.2 Preface Numbering 解题报告 【icedream61】

    preface解题报告----------------------------------------------------------------------------------------- ...

  5. USACO Section2.1 Hamming Codes 解题报告 【icedream61】

    hamming解题报告----------------------------------------------------------------------------------------- ...

  6. USACO Section2.3 Controlling Companies 解题报告 【icedream61】

    concom解题报告------------------------------------------------------------------------------------------ ...

  7. USACO Section2.3 Money Systems 解题报告 【icedream61】

    money解题报告------------------------------------------------------------------------------------------- ...

  8. USACO Section2.3 Zero Sum 解题报告 【icedream61】

    zerosum解题报告----------------------------------------------------------------------------------------- ...

  9. USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】

    nocows解题报告------------------------------------------------------------------------------------------ ...

随机推荐

  1. Gameplay Classes

    每个虚幻游戏类都是一个.h和一个.cpp组成. 类在虚幻中有便准的命名模式. 前缀: A继承于可量产的游戏性类.他们都是Actor,可以直接在游戏中生成. U继承于所有游戏性对象.不能在游戏中直接生成 ...

  2. IOS Get请求(请求服务器)

    @interface HMViewController () <NSURLConnectionDataDelegate> @property (weak, nonatomic) IBOut ...

  3. POJ-2456 Aggressive cows---最大化最小值(也就是求最大值)

    题目链接: https://vjudge.net/problem/POJ-2456 题目大意: 有n个牛栏,选m个放进牛,相当于一条线段上有 n 个点,选取 m 个点, 使得相邻点之间的最小距离值最大 ...

  4. C++11 新特性之 序列for循环

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/lr982330245/article/details/30971195 在C++中在C++中for循 ...

  5. vue中css动画原理

    显示原理: <transition name='fade'> <div v-if='show'>hello world</div> </transition& ...

  6. 关于Linux部分版本无法安装Chrome的问题

    在想要yum安装Chrome浏览器后发现安装没有相应的包,在查询后得知Chrome已经对Redhat和Centos等部分版本停止支持, 所以这些新版的系统中直接安装就显得有些困难了,那么从网上找到了一 ...

  7. c#简单加密和对称加密

    转自:https://www.cnblogs.com/zhihai/archive/2012/05/03/2480856.html using System;using System.Collecti ...

  8. 关于event loop

    之前写了篇文章 JS运行机制,里面对event loop简单的说明,面试时又遇到了关于该知识点的题目(主要是process.nextTick和setImmediate的执行顺序不太知道,查了之后才知道 ...

  9. JavaWeb各大组件生命周期

    JavaWeb各大组件生命周期 servlet生命周期 服务器打开:在第一次请求时实例化与初始化:然后进行服务:最后服务器关闭销毁 Cookie生命周期:存储在客户端 如果不设置过期时间,则表示这个c ...

  10. LArea 微信端 地址选择

    最近做到一个项目,微信端的商城需要地址选择功能 在百度上看了,采用LArea.js....下载实例,在移动端模拟器上运行是比较好的, 在微信上模拟后出现很多问题, 1,出现undefined 都定义正 ...