写这道题目的时候遇到了一个令人诧异的问题,就是平台上跑来的结果和我本机跑起来的结果不一样。

后来Debug了之后才发现是我数组开小了,只开到100 的数组竟然都去访问他170位的地址肯定要跪成翔啊...

好吧,解释一下题意。

有N盏台灯,C次操作

每次操作可以按一次按钮,一共一个四个按钮

可以得出的规律是每6个台灯是一次循环。

易得证。(其实不难发现Button 1 不用考虑,Button 2 和 Button 3 对立, 那么Button 4 的作用就是让1, 4, 7, 11改变状态

那么可以发现 7 和 1 其实是一模一样的,他们都受Button 1, 3, 4操控,依次类推即可)

还不会用BitSet来写这道题目...得学习一下了,我只开了个数组sta_ans[w][i][j][k][l][m][n] 来代表第w次操作后,后面六个代表的是二进制

这样的话每次访问都是O(1)的效率会非常快

结果:

USER: Jeremy Wu [wushuai2]
TASK: lamps
LANG: C++ Compiling...
Compile: OK Executing...
Test 1: TEST OK [0.011 secs, 5996 KB]
Test 2: TEST OK [0.005 secs, 5996 KB]
Test 3: TEST OK [0.005 secs, 5996 KB]
Test 4: TEST OK [0.005 secs, 5996 KB]
Test 5: TEST OK [0.005 secs, 5996 KB]
Test 6: TEST OK [0.005 secs, 5996 KB]
Test 7: TEST OK [0.003 secs, 5996 KB]
Test 8: TEST OK [0.005 secs, 5996 KB] All tests OK.
/*
ID: wushuai2
PROG: lamps
LANG: C++
*/
//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
#include <stack>
#include <string>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <vector>
#include <algorithm>
#define Max(a,b) (((a) > (b)) ? (a) : (b))
#define Min(a,b) (((a) < (b)) ? (a) : (b))
#define Abs(x) (((x) > 0) ? (x) : (-(x)))
#define MOD 1000000007
#define pi acos(-1.0)
#define RV(num) ((num) > 0 ? 0 : 1) using namespace std; typedef long long ll ;
typedef unsigned long long ull ;
typedef unsigned int uint ;
typedef unsigned char uchar ; template<class T> inline void checkmin(T &a,T b){if(a>b) a=b;}
template<class T> inline void checkmax(T &a,T b){if(a<b) a=b;} const double eps = 1e- ;
const int M = ;
const ll P = 10000000097ll ;
const int INF = 0x3f3f3f3f ;
const int MAX_N = ;
const int MAXSIZE = ; int N, C;
int ans[], sum;
int sta_ans[][][][][][][]; bool check(int i, int j, int k, int l, int m, int n){
int aaa[] = {, i, j, k, l, m, n};
for(int ii = ; ii < ; ++ii){
if(ans[ii] == - || aaa[ii] == ans[ii]){
continue;
} else return false;
}
return true;
} int main() {
ofstream fout ("lamps.out");
ifstream fin ("lamps.in");
int i, j, k, l, m, n, t, s, c, w, q, num;
memset(ans, -, sizeof(ans));
fin >> N;
fin >> C;
while(fin >> num){
if(- == num) break;
if(num % == ) ans[] = ;
else ans[num % ] = ;
}
while(fin >> num){
if(- == num) break;
if(num % == ) ans[] = ;
else ans[num % ] = ;
} sta_ans[][][][][][][] = ;
for(w = ; w <= C; ++w){
for(i = ; i < ; ++i){
for(j = ; j < ; ++j){
for(k = ; k < ; ++k){
for(l = ; l < ; ++l){
for(m = ; m < ; ++m){
for(n = ; n < ; ++n){
if(sta_ans[w - ][i][j][k][l][m][n] == ){
sta_ans[w][RV(i)][RV(j)][RV(k)][RV(l)][RV(m)][RV(n)] = ;
sta_ans[w][i][RV(j)][k][RV(l)][m][RV(n)] = ;
sta_ans[w][RV(i)][j][RV(k)][l][RV(m)][n] = ;
sta_ans[w][RV(i)][j][k][RV(l)][m][n] = ;
} }
}
}
}
}
} }
for(i = ; i < ; ++i){
for(j = ; j < ; ++j){
for(k = ; k < ; ++k){
for(l = ; l < ; ++l){
for(m = ; m < ; ++m){
for(n = ; n < ; ++n){
if(check(i, j, k, l, m, n)){
if(sta_ans[C][i][j][k][l][m][n] == ){
++sum;
for(int ii = ; ii <= N; ++ii){
if(ii % == ){
fout << n;
} else if(ii % == ){
fout << i;
} else if(ii % == ){
fout << j;
} else if(ii % == ){
fout << k;
} else if(ii % == ){
fout << l;
} else if(ii % == ){
fout << m;
}
}
fout << endl;
}
} }
}
}
}
}
}
if(!sum){
fout << "IMPOSSIBLE" << endl;
} fin.close();
fout.close();
return ;
}

USACO Party Lamps 【Binary code solvution】【规律】的更多相关文章

  1. URAL 1780 G - Gray Code 找规律

    G - Gray CodeTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view ...

  2. @gym - 101190B@ Binary Code

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 我们称一组字符串是 "前缀码",当且仅当不存 ...

  3. POJ 1850 Code(找规律)

    Code Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 7913   Accepted: 3709 Description ...

  4. BZOJ4840 NEERC2016 Binary Code

    Problem BZOJ Solution 可能是因为快要省选了,所以最近更博的频率好像高了点_(:зゝ∠)_ 每个字符串最多有两个状态,然后要满足一些依赖关系,考虑2sat.可以先把字符串的结束节点 ...

  5. USACO Party Lamps

    题目大意:一排灯有n个,有4种开关,每种开关能改变一些灯现在的状态(亮的变暗,暗的变亮)现在已知一些灯的亮暗情况,问所以可能的情况是哪些 思路:同一种开关开两次显然是没效果的,那么枚举每个开关是否开就 ...

  6. 格雷码(Gray Code)转二进制码(Binary Code)

    学习verilog generate语句时,偶然看到用generate语句来进行格雷码到二进制码转换的代码,就从网上找了一些案例来学习. 下表为几种自然二进制码与格雷码的对照表: 十进制数 自然二进制 ...

  7. 格雷码Gray Code详解

    格雷码简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码.格 ...

  8. Adaptive Code Via C#读书笔记

    原书链接: http://www.amazon.com/Adaptive-Code-via-principles-Developer-ebook/dp/B00OCLLYTY/ref=dp_kinw_s ...

  9. [LeetCode]题解(python):089 Gray Code

    题目来源 https://leetcode.com/problems/gray-code/ The gray code is a binary numeral system where two suc ...

随机推荐

  1. 利用console控制台调试php代码

    /** * 控制台输出 * @param $var * @param string $level */ public function console($var,$level = 'debug') { ...

  2. 过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@statement'

    declare   @Sql Nvarchar(4000)   SET @Sql = ' select * from a_table '要么这样, 要不然在执行存储过程变量前加N'' ALTER PR ...

  3. PGA与SGA

    当用户进程连接到数据库并创建一个对应的会话时,Oracle服务进程会为这个用户专门设置一个PGA区,用来存储这个用户会话的相关内容.当这个用户会话终止时,数据库系统会自动释放这个PAG区所占用的内存. ...

  4. poj 2653 计算几何

    #include <iostream> #include <cstring> #include <algorithm> #include <cmath> ...

  5. Oracle10g--plSql命令

    每天学点Oracle10g--plSql命令 附录B SQL*PLUS Sql*plus 中使用绑定变量: sql> variable x number; sql> exec :x := ...

  6. Php 使用 fsockopen发送http请求

    <?php function HTTP_Post($URL,$data, $referrer="") { // parsing the given URL $URL_Info ...

  7. Duplicate entry &#39;97112&#39; for key 1

    1.错误描写叙述 2014-07-08 10:27:13,939 ERROR(com.you.conn.JDBCConnection:104) -com.mysql.jdbc.exceptions.j ...

  8. 程序中的Cookie 和Session

    这几天回家休息后,想想放假之前的几天,主要看的一些工作上的东西,发现对Session和Cookie这两个东西,我还是很陌生.恩,趁着有网,看了点相关的资料,打算整理下.一翻博客,发现已经有前辈已经对这 ...

  9. 重启IIS常见命令

    重启IIS常见命令 http://jingyan.baidu.com/article/4ae03de30d6cfa3efe9e6b4a.html

  10. 精通Activity

    在平时开发中,Activity我们每个人应用的都滚瓜烂熟,回忆起来没有太难的地方,但是我们学习知识不应该只知其一不知其二,这样才能在学习的道理上越走越远,今天我要给大家分享的内容会让大家明白一些And ...