USACO Party Lamps 【Binary code solvution】【规律】
写这道题目的时候遇到了一个令人诧异的问题,就是平台上跑来的结果和我本机跑起来的结果不一样。
后来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】【规律】的更多相关文章
- URAL 1780 G - Gray Code 找规律
G - Gray CodeTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view ...
- @gym - 101190B@ Binary Code
目录 @description@ @solution@ @accepted code@ @details@ @description@ 我们称一组字符串是 "前缀码",当且仅当不存 ...
- POJ 1850 Code(找规律)
Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7913 Accepted: 3709 Description ...
- BZOJ4840 NEERC2016 Binary Code
Problem BZOJ Solution 可能是因为快要省选了,所以最近更博的频率好像高了点_(:зゝ∠)_ 每个字符串最多有两个状态,然后要满足一些依赖关系,考虑2sat.可以先把字符串的结束节点 ...
- USACO Party Lamps
题目大意:一排灯有n个,有4种开关,每种开关能改变一些灯现在的状态(亮的变暗,暗的变亮)现在已知一些灯的亮暗情况,问所以可能的情况是哪些 思路:同一种开关开两次显然是没效果的,那么枚举每个开关是否开就 ...
- 格雷码(Gray Code)转二进制码(Binary Code)
学习verilog generate语句时,偶然看到用generate语句来进行格雷码到二进制码转换的代码,就从网上找了一些案例来学习. 下表为几种自然二进制码与格雷码的对照表: 十进制数 自然二进制 ...
- 格雷码Gray Code详解
格雷码简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码.格 ...
- Adaptive Code Via C#读书笔记
原书链接: http://www.amazon.com/Adaptive-Code-via-principles-Developer-ebook/dp/B00OCLLYTY/ref=dp_kinw_s ...
- [LeetCode]题解(python):089 Gray Code
题目来源 https://leetcode.com/problems/gray-code/ The gray code is a binary numeral system where two suc ...
随机推荐
- 高性能javascript 学习笔记(1)
加载和运行 管理浏览器中的javascript代码是个棘手的问题,因为代码运行阻塞了其他浏览器处理过程,诸如用户绘制,每次遇到<script>标签,页面必须停下来等待代码下载(如果是外部的 ...
- 利用python进行数据分析之绘图和可视化
matplotlib API入门 使用matplotlib的办法最常用的方式是pylab的ipython,pylab模式还会向ipython引入一大堆模块和函数提供一种更接近与matlab的界面,ma ...
- (iOS)推送常见问题
1.为什么启动的时候出现 Did Fail To Register For Remote Notifications With Error的错误程序运行的时候出现下面的错误信息: did Fail T ...
- android 子线程更新UI
参考http://examples.javacodegeeks.com/android/core/os/handler/android-handler-example/package com.exam ...
- ID卡
ID卡全称为身份识别卡(Identification Card),是一种不可写入的感应卡,含固定的编号,主要有台湾SYRIS的EM格式.美国HIDMOTOROLA等各类ID卡.ID卡与磁卡一样,都仅仅 ...
- STL deque详解
英文原文:http://www.codeproject.com/Articles/5425/An-In-Depth-Study-of-the-STL-Deque-Container 绪言 这篇文章深入 ...
- Android Animations动画使用详解
一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...
- 解决shell脚本中 echo 怎么写入换行到文件
測试环境:ubuntu12.04 LTS版本号 echo >> file.txt就可以, 这样的方法对于脚本开头是bash和sh效果都一样, 而echo -e >> file. ...
- 3.3 用NPOI操作EXCEL--生成一张工资单
这一节,我们将综合NPOI的常用功能(包括创建和填充单元格.合并单元格.设置单元格样式和利用公式),做一个工资单的实例.先看创建标题行的代码: //写标题文本 HSSFSheet sheet1 = h ...
- MySQL 存储过程创建表
创建 CREATE PROCEDURE Pro_IsExistTable(ableName varchar(100),out outputParam int)BEGINset @csql=conca ...