poj1021 概率,最小表示
来源:互联网 发布:js list shift 编辑:程序博客网 时间:2024/05/16 09:29
这个真的很强!网上找的:
唯一的难点是,怎么判断连成一片的棋子形状相同? 一个基于概率的算法是:给每一颗棋子计算一个值,根据这个值是否相等来推测它所在的一片棋子的形状是否相等。计算出每颗棋子的值后对其进行排序,若两副棋盘生成的序列完全相等则推测其等价。
至于这个值如何定,我的设计为:每颗棋子在其水平方向和垂直方向与其相连的棋子总数+1(自己)。比如左图的C,这个值为水平相连2颗(AB)+垂直相连1颗(G)+1=4。
#include <iostream>using namespace std;int a[101][101],b[10010],c[10010],d,e,ans,x[10010],y[10010],n,m,k,cas;int main() { scanf("%d",&cas); while (cas--) { scanf("%d%d%d",&n,&m,&k); memset(a,0,sizeof(a)); for (int i=1;i<=k;i++) { scanf("%d%d",&x[i],&y[i]); a[x[i]][y[i]] = 1; } memset(b,0,sizeof(b)); for (int i=1;i<=k;i++) { b[i] = 1; d = x[i]; e = y[i]; while (d<n-1 && a[d+1][e]==1) { b[i]++; d++; } d = x[i]; e = y[i]; while (d>0 && a[d-1][e]==1) { b[i]++; d--; } d = x[i]; e = y[i]; while (e<m-1 && a[d][e+1]==1) { b[i]++; e++; } d = x[i]; e = y[i]; while (e>0 && a[d][e-1]==1) { b[i]++; e--; } } memset(a,0,sizeof(a)); for (int i=1;i<=k;i++) { scanf("%d%d",&x[i],&y[i]); a[x[i]][y[i]] = 1; } memset(c,0,sizeof(c)); for (int i=1;i<=k;i++) { c[i] = 1; d = x[i]; e = y[i]; while (d<n-1 && a[d+1][e]==1) { c[i]++; d++; } d = x[i]; e = y[i]; while (d>0 && a[d-1][e]==1) { c[i]++; d--; } d = x[i]; e = y[i]; while (e<m-1 && a[d][e+1]==1) { c[i]++; e++; } d = x[i]; e = y[i]; while (e>0 && a[d][e-1]==1) { c[i]++; e--; } } sort(b+1,b+k+1); sort(c+1,c+k+1); ans = 1; for (int i=1;i<=k;i++) if (b[i]!=c[i]) { ans = 0; break; } if (ans) printf("YES\n"); else printf("NO\n"); } return 0;}
- poj1021 概率,最小表示
- poj1021
- poj1021
- 条件概率【概率树表示】
- 最小表示
- poj1021 哈希
- 最小表示法
- 字符串最小表示模板
- poj1509(最小表示法)
- hdu4162(最小表示法)
- 最小表示法
- 最小表示法
- 最小表示法
- 最小表示法模板
- 最小表示法
- 字符串最小表示
- 最小表示法+uva719
- 最小表示法
- ELF文件病毒的分析和编写
- 基于Youtube的网站Tubalr:只需输入歌手名字,再轻点搜索,一个干净而简单的MTV播放列表立刻呈现
- Hibernate query.addEntity 转载+原创
- Ext.util工具包详解
- 新的篇章:赚了一元钱
- poj1021 概率,最小表示
- 二维数组定义和赋值
- 多线程
- 糗百推荐码
- 虚拟化妆应用美妆魔镜让你“妆”出美丽动人
- string类的GetCharEnumerator方法去掉字符串中空格
- Android去哪儿客服端(5)
- 深圳创业公司宇初网络推出国内首家验证码广告平台,用广告代替验证码
- Application.StartupPath获取执行文件路径substring()取特定长度字符串取得根目录