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

后来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. 【转载】python 模块 - random生成随机数模块

    随机数种子 要每次产生随机数相同就要设置种子,相同种子数的Random对象,相同次数生成的随机数字是完全相同的: random.seed(1) 这样random.randint(0,6, (4,5)) ...

  2. openScales源码学习系列之 Feature属性

    coordinates:当前区域,geometry或Polygon的点集合. countries.国家所在位置下标 SQKM.平方千米 COLOR_MAP.该国家的颜色类别 SQMI.平方英里 CON ...

  3. HDU 1507 Uncle Tom's Inherited Land*

    题目大意:给你一个矩形,然后输入矩形里面池塘的坐标(不能放东西的地方),问可以放的地方中,最多可以放多少块1*2的长方形方块,并输出那些方块的位置. 题解:我们将所有未被覆盖的分为两种,即分为黑白格( ...

  4. java 面试 复习 II

    1  break  多重 循环跳出当前循环到上层循环再执行. 如若想跳出多重循环可以使用标号 2  byte,short,char都可以隐含转换为int.可以用在switch 表达式.long和str ...

  5. Android实现视频录制

    安卓实现视频录制,有两种方法,一种是调用自带的视频功能,一种是使用MediaRecorder. 每种方法都有自己的优缺点.接下来,把两种方法的代码写出来. 先说第一种方法,也是最简单的方法,那就是直接 ...

  6. <input type="text">文本输人框

    type类型: text  文本框 password  口令密码输人框 reset  重置或清除 buttou  命令按钮 checkbox  复选框 radio  单选框 submit  提交 fi ...

  7. css两列布局,一边固定宽度,另一边自适应

    <!DOCTYPE HTML><HTML>    <head>                <meta charset="utf-8" ...

  8. C# 日期格式转换 string类型 20150329 转换为 2015/03/29

    DateTime.ParseExact("20150329", "yyyyMMdd", System.Globalization.CultureInfo.Cur ...

  9. C#主键类型选择

    1.SQL Server中两种常用的主键数据类型:int(或者bigint)+标识列(又称自动增长字段) uniqueidentifier(又称Guid.UUID) 2.Guid算法是一种可以产生唯一 ...

  10. 裸机代码(uboot) : clear bss

    一. bss介绍: 代码中函数.变量.常量 / bss段.data段.text段 /sct文件..map文件的关系[实例分析arm代码(mdk)] bss和data的区别: 全局的未初始化变量存在于. ...