ACM/ICPC 之 枚举(POJ1681-画家问题+POJ1166-拨钟问题+POJ1054-讨厌的青蛙)

时间:2022-08-24 10:08:40

  POJ1681-画家问题

  枚举的经典例题,枚举第一行即可,其余行唯一。

 //画家问题,y表示黄色,w表示白色,怎样让墙上所有方格为y,操作类似熄灯问题poj1222
//memory 136K Time: 297 Ms
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; #define INF 0x3f3f3f3f
#define MAX 20 char m[MAX][MAX];
int n,ans,sum;
int map[MAX][MAX],cpmap[MAX][MAX],p[MAX];
int move[][] = {{,},{-,},{,},{,-}}; void paint(int x,int y)
{
sum++;
cpmap[x][y] = !cpmap[x][y];
for(int i=;i<;i++)
{
int tx = x+move[i][];
int ty = y+move[i][];
if(tx>= && tx<n && ty>= && ty<n)
cpmap[tx][ty] ^= ;
}
} /*尝试绘画*/
int test_paint()
{
int i,j;
for(i=;i<n;i++) //第一行
if(p[i])
paint(,i);
for(i=;i<n;i++) //其余行唯一
{
for(j=;j<n;j++)
{
if(!cpmap[i-][j])
paint(i,j);
}
}
//判断最后一行是否符合
int flag = ;
for(i=;i<n;i++)
if(!cpmap[n-][i])
{
flag = ;break;
}
return flag;
} int main()
{
int T;
int i,j;
scanf("%d",&T);
while(T--)
{
memset(p,,sizeof(p));
ans = INF;
scanf("%d",&n);
for(i=;i<n;i++)
scanf("%s",m[i]);
//字符-转换为-0与1
for(i=;i<n;i++)
for(j=;j<n;j++)
if(m[i][j] == 'y')
map[i][j] = ;
else
map[i][j] = ; p[] = -;
int res;
while()
{
sum = ;
memcpy(cpmap,map,sizeof(map));
/*二进制枚举第一行所有画法*/
p[]++;
res = p[]/;
j=;
while(res)
{
p[j-] = ;
p[j]++;
res = p[j++]/;
}
if(p[n])
break;
if(test_paint())
if(ans > sum)
ans = sum;
}
if(ans == INF)
printf("inf\n");
else
printf("%d\n",ans);
}
return ;
}

  POJ1166-拨钟问题

  分析后枚举所有可能情况。

 //暴力枚举-熄灯问题变形-拨钟问题,给出九个钟的时针位置(3,6,9,12)-(1,2,3,0)-将他们调到12点 即
//Memory 134K Time: 0 Ms #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; int sclock[]; //source-clock
int pc[]; //调好后时针位置 int main()
{
int j;
for (j = ; j <= ; j++)
scanf("%d",&sclock[j]);
int i[]; //枚举所有九种拨法的情况-每种拨法最多3次 (第四次相当于没有拨动)
//4^9种情况
for (i[] = ; i[] < ; i[]++)
for (i[] = ; i[] < ; i[]++)
for (i[] = ; i[] < ; i[]++)
for (i[] = ; i[] < ; i[]++)
for (i[] = ; i[] < ; i[]++)
for (i[] = ; i[] < ; i[]++)
for (i[] = ; i[] < ; i[]++)
for (i[] = ; i[] < ; i[]++)
for (i[] = ; i[] < ; i[]++)
{
pc[] = (sclock[] + i[] + i[] + i[]) % ;
pc[] = (sclock[] + i[] + i[] + i[] + i[]) % ;
pc[] = (sclock[] + i[] + i[] + i[]) % ;
pc[] = (sclock[] + i[] + i[] + i[] + i[]) % ;
pc[] = (sclock[] + i[] + i[] + i[] + i[] + i[]) % ;
pc[] = (sclock[] + i[] + i[] + i[] + i[]) % ;
pc[] = (sclock[] + i[] + i[] + i[]) % ;
pc[] = (sclock[] + i[] + i[] + i[] + i[]) % ;
pc[] = (sclock[] + i[] + i[] + i[]) % ; int sum = ;
for (j = ; j <= ; j++)
sum += pc[j];
if (!sum)
{
for (j = ; j <= ;j++)
while (i[j]--)
printf("%d ",j);
printf("\n");
return ;
}
}
return ;
}

  POJ1054-讨厌的青蛙

 //Flog直线等步长踩稻子(array),找出踩过最多的一条Flog路径
//Memory 172K Time: 47 Ms
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; #define min(x,y) ((x)>(y)?(y):(x))
#define MAX 5005 struct Node {
int x, y;
}map[MAX]; //踩过路径 int row, col, length;
int n, maxlen = ; bool operator < (const Node &a, const Node &b) //重载全局运算符 <,以满足binary_search()与sort()处理Node的需要
{
//二重排序-行列序
if (a.x == b.x) return a.y < b.y;
return a.x < b.x;
} /*延长路径-判定该路径是否成立*/
void extend(Node second, int cx, int cy)
{
Node t;
t.x = second.x + cx;
t.y = second.y + cy;
while (t.x >= && t.x <= row && t.y >= && t.y <= col)
{
if (!binary_search(map, map + n, t))//没有find-不成立
{
length = ;
break;
}
//find-成立
length++;
t.x += cx;
t.y += cy;
}
if (length > maxlen)
maxlen = length;
} int main()
{
scanf("%d%d%d", &row, &col, &n);
for (int i = ; i<n; i++)
scanf("%d%d", &map[i].x, &map[i].y); sort(map, map + n);
for (int i = ; i < n; i++)
for (int j = i + ; j < n; j++)
{
length = ;
int cx = map[j].x - map[i].x; //横步长
int cy = map[j].y - map[i].y; //纵步长
int px = map[i].x - cx; //(px,py)为假想跳跃起始位置
int py = map[i].y - cy; if (px >= && px <= row && py >= && py <= col)
continue; //已访问此路径或路径不存在 px = map[i].x + (maxlen - )*cx;
py = map[i].y + (maxlen - )*cy;
if (px > row) break; //纵向须跳跃的最小距离超过row-遍历第一跳跃点
if (py > col || py < ) continue; //横向须跳跃的最小距离超过col-遍历第二跳跃点
extend(map[j], cx, cy); //极值无误-尝试拓展
} if (maxlen == ) maxlen = ; //没有最长路径
printf("%d\n", maxlen);
return ;
}

ACM/ICPC 之 枚举(POJ1681-画家问题+POJ1166-拨钟问题+POJ1054-讨厌的青蛙)的更多相关文章

  1. ACM ICPC 2015 Moscow Subregional Russia&comma; Moscow&comma; Dolgoprudny&comma; October&comma; 18&comma; 2015 D&period; Delay Time

    Problem D. Delay Time Input file: standard input Output file: standard output Time limit: 1 second M ...

  2. hduoj 4712 Hamming Distance 2013 ACM&sol;ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  3. 2016 ACM&sol;ICPC Asia Regional Qingdao Online(2016ACM青岛网络赛部分题解)

    2016 ACM/ICPC Asia Regional Qingdao Online(部分题解) 5878---I Count Two Three http://acm.hdu.edu.cn/show ...

  4. &lbrack;C&plus;&plus;&rsqb;最小生成元 &lpar;Digit Generator&comma; ACM&sol;ICPC Seoul 2005&comma; UVa1583&rpar;

    Question 例题3-5 最小生成元 (Digit Generator, ACM/ICPC Seoul 2005, UVa1583) 如果x+x的各个数字之和得到y,就是说x是y的生成元.给出n( ...

  5. ACM ICPC Kharagpur Regional 2017

    ACM ICPC Kharagpur Regional 2017 A - Science Fair 题目描述:给定一个有\(n\)个点,\(m\)条无向边的图,其中某两个点记为\(S, T\),另外标 ...

  6. 2017 ACM ICPC Asia Regional - Daejeon

    2017 ACM ICPC Asia Regional - Daejeon Problem A Broadcast Stations 题目描述:给出一棵树,每一个点有一个辐射距离\(p_i\)(待确定 ...

  7. Codeforces Round &num;445 A&period; ACM ICPC【暴力】

    A. ACM ICPC time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  8. 2014嘉杰信息杯ACM&sol;ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  9. ACM&sol;ICPC 之 BFS&lpar;离线&rpar;&plus;康拓展开&lpar;TSH OJ-玩具&lpar;Toy&rpar;&rpar;

    祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...

随机推荐

  1. Matlab代码备忘

    1.Matlab写入文件  set(hp1,'xdata',bbb(1,:),'ydata',bbb(2,:),'zdata',bbb(3,:)); M=size(bbb,2); name=strca ...

  2. 浏览器收藏夹插件-Xmarks

    Xmarks 一一 一款简约实用的浏览器书签同步插件 首先还是想吐槽一下firefox的收藏夹同步功能,感觉不实用,密钥的长度如果不是存到手机或者别的终端,压根没办法实现同步. 而且还区分了,如果两台 ...

  3. nginx web加密访问

    有时我们会有这么一种需求,就是你的网站并不想提供一个公共的访问或者某些页面不希望公开, 我们希望的是某些特定的客户端可以访问.那么我们可以在访问时要求进行身份认证,就如给你自己的家门加一把锁,以拒绝那 ...

  4. git tag推送小分析

    一个推送可以用三条命令 -[deleted]-git push origin --tags git push origin master --follow-tags git push --follow ...

  5. IIS网站部署错误总结

    aspx 常见错误 CS0016: 未能写入输出文件“c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/... ...

  6. Education Round16

    A题:题意:给定国际象棋king的坐标,求能向几个方向移动分析:处理一下边界情况,其他的都是8 #include <iostream> #include <cstdio> #i ...

  7. JavaScript 频繁发射事件处理的优化 --- 函数节流&sol;事件稀释

    引子:昨天面试时面试官问了如何实现一个固定导航栏,在我答完后面试官问我可能存在哪些问题,如何优化? 这个问题我答得不太好,但现在回想起来应该有两个问题: 1. 把 fixbar元素 position: ...

  8. Java字节码里的invoke操作&amp&semi;&amp&semi;编译时的静态绑定与动态绑定

    一个一直运行正常的应用突然无法运行了.在类库被更新之后,返回下面的错误. Exception in thread "main" java.lang.NoSuchMethodErro ...

  9. c&plus;&plus;中的一些计算的问题

    要实现小数的四舍五入, float a = 3.456; //保留到小数点后两位 float b =(int)((a * 100) + 0.5) / 100.0; 但是这样对负数不好使, 对负数的话, ...

  10. springboot-13-junitTest

    junitTest, 提喜欢用的一个方法, 在测试代码时非常好用 1, 添加maven依赖 <!-- 加入spring-test依赖 --> <dependency> < ...