poj 1176 Party Lamps
http://poj.org/problem?id=1176
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 4023 | Accepted: 1386 |
Description
1 to N. The lamps are connected to four buttons:
button 1 -- when this button is pressed, all the lamps change their state: those that are ON are turned OFF and those that are OFF are turned ON.
button 2 -- changes the state of all the odd numbered lamps.
button 3 -- changes the state of all the even numbered lamps.
button 4 -- changes the state of the lamps whose number is of the form 3K+1 (with K >= 0), i.e., 1,4,7,...
There is a counter C which records the total number of button presses.
When the party starts, all the lamps are ON and the counter C is set to zero.
You are given the value of counter C and information on the final state of some of the lamps. Write a program to determine all the possible final configurations of the N lamps that are consistent with the given information, without repetitions.
Input
The first line contains the number N and the second line the final value of counter C. The third line lists the lamp numbers you are informed to be ON in the final configuration, separated by one space and terminated by the integer -1. The fourth line lists the lamp numbers you are informed to be OFF in the final configuration, separated by one space and terminated by the integer -1.
The parameters N and C are constrained by:
10 <= N <= 100
1 <= C <= 10000
The number of lamps you are informed to be ON, in the final configuration, is less than or equal to 2.The number of lamps you are informed to be OFF, in the final configuration, is less than or equal to 2.
Output
Sample Input
10
1
-1
7 -1
Sample Output
0000000000
0101010101
0110110110
分析:
题意:对于一串彩灯,提供四种改变彩灯状态(ON<=>OFF)的操作:a.改变所有彩灯状态;b.改变奇数彩灯状态;c.改变偶数彩灯状态;d.改变3k+1号彩灯状态(1,4,7,10...)。
给定彩灯数目,操作次数,和对于某几个彩灯必须为ON、某几个彩灯必须为OFF的要求,问经过给定次数的操作,最终能达到的满足要求的状态有多少种,输出所有满足要求的彩灯状态。
原题中操作次数是1<=C<=10000的,如果以此为搜索深度,时间复杂度相当可观。
转换思路:
当按第一种操作时 :奇偶全变
当按第二种操作时 :奇数全变
当按第三种操作时 :偶数全变
当按第四种操作时 :3K + 1 全变(1 , 4 ,7 , 10 , 13 , 16 , 。。。97 ,100)。
四种情况的最小公倍数为 8 ,即是周期为 8 ,打表可得:
string s[8]={
"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
"0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101",
"0110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110",
"1001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001",
"1100011100011100011100011100011100011100011100011100011100011100011100011100011100011100011100011101",
"0011100011100011100011100011100011100011100011100011100011100011100011100011100011100011100011100011",
"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
};
1,当只按键一次出现的状态有:1,2,3,4
2,当按键二次则出现的状态有:1,2,3,5,6,7,8
3,当按键三次或三次以上全部状态可以出现。
AC代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int N,C;
int v1[],v2[];
int cmp(const void *a,const void *b)
{
if(*(string*)a>*(string*)b)
return ;
else return ;
} int main()
{
//freopen("input.txt","r",stdin);
string result[];
int temp,i,i1(),i2(),j,id();
string s[]={
"",
"",
"",
"",
"",
"",
"",
""
}; cin>>N>>C;
cin>>temp;
while(temp!=-)
{
v1[i1++]=temp-;
cin>>temp;
}
cin>>temp;
while(temp!=-)
{
v2[i2++]=temp-;
cin>>temp;
}
if(C==)
{
for(i=;i<N;i++)
cout<<s[][i];
cout<<endl;
}//c=0
else if(C>=)
{
for(i=;i<;i++)
{
if(i==)
{
if(C==) continue;
}
if(i== || i== || i== || i==)
{
if(C<) continue;
}
for(j=;j<i1;j++)
{
temp=v1[j];
if(s[i][temp]!='') break;
}
if(j==i1)
{
for(j=;j<i2;j++)
{
temp=v2[j];
if(s[i][temp]!='') break;
}
if(j==i2)
{
result[id]=s[i];
id++;
}
}
}//for
qsort(result,id,sizeof(string),cmp);
for(i=;i<id;i++)
{
for(j=;j<N;j++)
cout<<result[i][j];
cout<<endl;
}
}//if return ; }
poj 1176 Party Lamps的更多相关文章
- POJ 1176 Party Lamps&& USACO 2.2 派对灯(搜索)
题目地址 http://poj.org/problem?id=1176 题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都 ...
- POJ 1176 Party Lamps (DFS)
对于一束灯光.提供四种改变彩灯状态(ON<=>OFF)的操作:a.改变全部彩灯状态:b.改变奇数彩灯状态.c.改变偶数彩灯状态:d.改变3k+1号彩灯状态(1,4,7,10...). 给定 ...
- POJ 题目分类(转载)
Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...
- (转)POJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- poj分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
- POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)
本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...
- POJ题目分类(转)
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
随机推荐
- day11
JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. 1.2 ...
- Python之list添加新元素、删除元素、替换元素
Python之list添加新元素 现在,班里有3名同学: >>> L = ['Adam', 'Lisa', 'Bart'] 今天,班里转来一名新同学 Paul,如何把新同学添加到现有 ...
- SecureCRT SSH VMware Ubuntu
Ubuntu 10.4 装完后网络OK. NAT模式下, 可以上网. 宿主机和客户机可以彼此ping通. 主要是检查SSH服务, 和防火墙是否关闭(UBUNTU 默认没有安装SSH, 默认启动了防火墙 ...
- php YAF
Yaf 的特点: 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销. 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存. 更短的内存周转周期, 提高内存利用 ...
- 那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)[zz]
openssl dgst –sign privatekey.pem –sha1 –keyform PEM –c c:\server.pem 将文件用sha1摘要,并用privatekey.pem中的私 ...
- Lambda中的一些方法的总结
public List<UserInfoBaseModel> GetNameByIDList(List<int> UserID) { var UserList = LoadRe ...
- Maximal Square || LeetCode
dp. #define MAX 1000 int rowLeft[MAX][MAX]; int colUp[MAX][MAX]; int dp[MAX][MAX]; void calRow(char ...
- express 查看版本号
新安装了express,但是当查看版本号输入: express -v 时出现如下错误: 网上查找了相关资料才发现express查看版本 的命令是 express -V (即V大写) 再次尝试: 发现同 ...
- Mac下安装和配置mongoDB
mac下的mongodb下载安装比较简单,主要有两种方式,一种是下载压缩包解压,另一种是通过npm或者homebrew命令安装,这里就不赘述了, 复杂的在于mongodb运行环境的配置(若未配置运行环 ...
- 错误提示: An App ID with identifier "*****" is not avaliable. Please enter a different string.
百度了很多,但大多的解决办法就是 更改BundleID,的确管用,,但是有的情况下,你需要跟同事合作,公用同一个BundleID, 我是这样处理的:工具栏中打开Window—project删除所有工程 ...