[水题]ZOJ3038 Triangle War II
题意:

给了这样一张图 有两种状态:pushed(*)和unpushed(.) 为方便起见分别成为 开 和 关
改变一个点的开关状态 会同时改变与它相邻的点的开关状态 比如改变5,则2、3、4、6、8、9都会改变
N(行数)最多为6 即 最多21个点
求: 任意改变开关状态后 最多能有几个关着。
为什么这么像高斯消元!!!
每个点的状态只有开和关 总共就只有2^21个状态
dfs会爆栈!
所以bfs就行了! 把这些点的开关状态看成二进制 用0到$2^{21}$的数组来标记当前状态有没有出现过
struct node
{
bool a[];
}front, rear;
queue<node> q;
int ans;
bool vis[];
int biao[]={, , , , , , };
int b[][]={
{,},
{-,},
{-,-},
{,},
{,},
{,},
{,-}
};
int l[], c[][];
void pre()
{
memset(l, , sizeof(l));
for(int i=;i<=;i++)
{
int x=;
while(biao[x]<i)
x++;
int y=i-x*(x-)/;
for(int k=;k<;k++)
{
int dx=x+b[k][];
int dy=y+b[k][];
if(dx>= && dx<= && dy>= && dy<=dx)
c[i][l[i]++]=dx*(dx-)/+dy;
}
}
}
void bfs(int n)
{
int d=;
for(int i=;i<=n;i++)
d=(d<<)+front.a[i];
vis[d]=;
q.push(front);
while(!q.empty())
{
front=q.front();
q.pop();
for(int i=;i<=n;i++)
if(!front.a[i])
{
rear=front;
for(int j=;j<l[i];j++)
rear.a[c[i][j]]=^front.a[c[i][j]];
d=;
int cnt=;
for(int j=;j<=n;j++)
{
d=(d<<)+rear.a[j];
if(!rear.a[j])
cnt++;
}
if(!vis[d])
{
vis[d]=;
ans=max(ans, cnt);
if(ans==n)
return ;
q.push(rear);
}
}
}
}
int main()
{
pre();
int n;
while(~scanf("%d", &n))
{
ans=;
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
{
char ch;
cin>>ch;
if(ch=='.')
ans++;
front.a[i*(i-)/+j]=(ch=='*');
}
n=(n+)*n/;
if(ans==n)
{
printf("%d\n", ans);
continue;
}
while(!q.empty())
q.pop();
memset(vis, , sizeof(vis));
bfs(n);
printf("%d\n", ans);
}
return ;
}
ZOJ 3038
[水题]ZOJ3038 Triangle War II的更多相关文章
- hdu 1140:War on Weather(计算几何,水题)
War on Weather Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- BNU29064——硬币水题II——————【事件概率】
硬币水题II Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: ...
- HDU 6300.Triangle Partition-三角形-水题 (2018 Multi-University Training Contest 1 1003)
6300.Triangle Partition 这个题就是输出组成三角形的点的下标. 因为任意三点不共线,所以任意三点就可以组成三角形,直接排个序然后输出就可以了. 讲道理,没看懂官方题解说的啥... ...
- ACM水题
ACM小白...非常费劲儿的学习中,我觉得目前我能做出来的都可以划分在水题的范围中...不断做,不断总结,随时更新 POJ: 1004 Financial Management 求平均值 杭电OJ: ...
- hdu 2393:Higher Math(计算几何,水题)
Higher Math Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem A: The 3n + 1 problem(水题)
Problem A: The 3n + 1 problem Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 14 Solved: 6[Submit][St ...
- Atcoder 水题选做
为什么是水题选做呢?因为我只会水题啊 ( 为什么是$Atcoder$呢?因为暑假学长来讲课的时候讲了三件事:不要用洛谷,不要用dev-c++,不要用单步调试.$bzoj$太难了,$Topcoder$整 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- NYOJ-525一道水题思路及详解
一道水题 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 今天LZQ在玩一种小游戏,但是这游戏数有一点点的大,他一个人玩的累,想多拉一些人进来帮帮他,你能写一个程序帮帮他 ...
随机推荐
- css实现带箭头选项卡
这阵子在做一个web端项目中遇到一个问题,需要实现带箭头的选项卡点击可切换.起初没想太多,直接切一个向上的小箭头图片,外层div设置相同颜色的边框,再用相对定位和绝对定位.这种方法是可行的,但是因为手 ...
- 抽象(abstract)升级版变接口(interface) 继承(extends)升级版叫实现(implements) 升级版啊升级版 接口可以多继承
Client --------------------------------------------------- public class Client{ public static void m ...
- 用jquery-easyui中的combotree实现树形结构的选择
用jquery-easyui中的combotree实现树形结构的选择 需求:实现一个树形节点的选择,要求默认父节点都折叠,父节点前的checkbox不显示,子节点显示checkbox,且父节点不可选择 ...
- Java中内存空间的分配及回收
Java中内存分为: 栈:存放简单数据类型变量(值和变量名都存在栈中),存放引用数据类型的变量名以及它所指向的实例的首地址. 堆:存放引用数据类型的实例. Java的垃圾回收: 由一个后台线程GC(G ...
- zabbix数据存储
一.zabbix数据库 zabbix-server将采集到的数据存储在数据库中,最常用的Mysql,数据存储的大小和每秒处理的数据量有关,数据存储取决于每秒处理的数据量和Housekeeper的删除数 ...
- WebService简单介绍
什么是Web Services 一直没有一个明确的答案,最近听了一个大牛讲WebService,顿时明了了,作个记录免得以后忘了. N年之前,各公司都在炒作SOA,不过现在已经没人再提了,现在都改叫W ...
- FancyBox——jQuery弹出窗口插件
最近工作项目中有用到这款插件,就查找了一下相关资料和用法,下面是一些基本的简单用法,比较容易掌握,有需要的小伙伴可以参考.:) FancyBox是一款基于jquery开发的类Lightbox插件.支持 ...
- Oracle PL/SQL 事物处理 银行转账
Oracle数据库中的事务处理:添加,修改,删除时需要使用事务处理(显示事务). 1.事务的分类显示事务(添加,修改,删除)和隐式事务(除了添加,修改,删除). 2.事务的执行方式:自动提交(jdbc ...
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...
- OpenJudge/Poj 1664 放苹果
1.链接地址: http://bailian.openjudge.cn/practice/1664 http://poj.org/problem?id=1664 2.题目: 总时间限制: 1000ms ...