[水题]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在玩一种小游戏,但是这游戏数有一点点的大,他一个人玩的累,想多拉一些人进来帮帮他,你能写一个程序帮帮他 ...
随机推荐
- Rabbit MQ安装配置及常见问题
Window安装 1:RabbitMQ安装 1.1:安装Erlang:http://www.erlang.org/ 1.2:安装RabbitMQ:http://www.rabbitmq.com/dow ...
- [转]深入理解jQuery插件开发
如果你看到这篇文章,我确信你毫无疑问会认为jQuery是一个使用简便的库.jQuery可能使用起来很简单,但是它仍然有一些奇怪的地方,对它基本功能和概念不熟悉的人可能会难以掌握.但是不用担心,我下面已 ...
- java.net.BindException: 权限不够
在Linux 下 ,今天写了个socket小程序,绑定80端口,发现抛异常 原因其实是因为在linux下,如果使用1024以下的端口则需要root权限, 所以因为我当前使用的不是root权限,所以权限 ...
- ACM——01排序
http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1024 01排序 时间限制(普通/Jav ...
- [转]Windows Shell 编程 第二章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987893】
第二章Shell的结构 “Shell 编程”的大伞之下有大量的API函数和COM接口.这个种类繁多的‘命令’集允许你用不同的方法对Windows Shell进行编程.函数和接口并不是两种提供相同功能 ...
- ios Swift 备忘录
Variables var myInt = var myExplicitInt: Int = // explicit type var x = , y = , z = // declare multi ...
- Google 编码风格
一.Google JavaScript编码风格 简体中文版 Google JavaScript Style Guide 二.Google HTML/CSS代码风格指南 简体中文版 三.Google C ...
- 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)
J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64 ...
- OpenJudge 2811 熄灯问题 / Poj 1222 EXTENDED LIGHTS OUT
1.链接地址: http://bailian.openjudge.cn/practice/2811 http://poj.org/problem?id=1222 2.题目: 总时间限制: 1000ms ...
- dataTable 禁止排序
$("#id").DataTable({ "ordering": false, // 禁止排序 });