POJ 1175
//本来写了个和1021相同的HASH,但没过,于是,抱着侥幸的心理,把它变成距离的四次方,
//我就呵呵了。。。
//这个题,完全靠概率。当然了,如果是把图翻转来比较,也是可以的。但好像很麻烦。。 #include <iostream>
#include <cstdio>
#include <cstring> using namespace std;
const int MAX=;
const int MOD=;
char map[MAX][MAX];
int dir[][]={,,-,,,,,-,,,,-,-,,-,-};
int w,h;
struct cl{
char c;
int val,next;
}clu[];
int hash[];
struct sv{
int x,y;
}save[];
int sa,counted;
int tot;
void dfs(int i,int j){
map[i][j]=''; sa++;
save[sa].x=i; save[sa].y=j;
for(int k=;k<;k++){
int tx=i+dir[k][];
int ty=j+dir[k][];
if(map[tx][ty]==''&&tx>=&&tx<h&&ty>=&&ty<w){
dfs(tx,ty);
}
}
} void calculate(){
int i,j,x,y;
int sum=;
for(i=;i<=sa;i++){
x=save[i].x; y=save[i].y;
for(j=i+;j<=sa;j++){
int dx=abs(x-save[j].x);
int dy=abs(y-save[j].y);
sum=sum+(dx*dx+dy*dy)*(dx*dx+dy*dy);
}
}
int h=sum%MOD; char sure;
if(hash[h]==-){
sure='a'+(++counted);
clu[tot].val=sum;
clu[tot].c=sure;
clu[tot].next=hash[h];
hash[h]=tot++;
}
else{
// bool flag=false;
for(int e=hash[h];e!=-;e=clu[e].next){
if(clu[e].val==sum){
clu[tot].c=clu[e].c;
clu[tot].val=sum;
clu[tot].next=hash[h];
hash[h]=tot++;
sure=clu[e].c;
// flag=true;
break;
}
}
}
for(i=;i<=sa;i++){
map[save[i].x][save[i].y]=sure;
}
} void slove(){
for(int i=;i<h;i++){
for(int j=;j<w;j++){
if(map[i][j]==''){
sa=;
dfs(i,j);
calculate();
}
}
}
} int main(){
int i;
while(scanf("%d%d",&w,&h)!=EOF){
for(i=;i<h;i++)
scanf("%s",map[i]);
counted=-; tot=;
memset(hash,-,sizeof(hash));
slove();
for(i=;i<h;i++){
printf("%s",map[i]);
printf("\n");
}
}
return ;
}
POJ 1175的更多相关文章
- 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题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- 转载:poj题目分类(侵删)
转载:from: POJ:http://blog.csdn.net/qq_28236309/article/details/47818407 按照ac的代码长度分类(主要参考最短代码和自己写的代码) ...
- poj和hdu部分基础算法分类及难度排序
最近想从头开始刷点基础些的题,正好有个网站有关于各大oj的题目分类(http://www.pythontip.com/acm/problemCategory),所以写了点脚本把hdu和poj的一些题目 ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22286 ...
随机推荐
- 【POJ 3074】 Sudoku
[题目链接] http://poj.org/problem?id=3074 [算法] 将数独问题转化为精确覆盖问题,用Dancing Links求解 转化方法如下 : 我们知道,在一个数独中 : 1. ...
- 【NOI 2014】 动物园
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3670 [算法] KMP [代码] #include<bits/stdc++.h ...
- Java8新特性之Optional
空指针异常一直是困扰Java程序员的问题,也是我们必须要考虑的.当业务代码中充满了if else判断null 的时候程序变得不再优雅,在Java8中提供了Optional类为我们解决NullPoint ...
- 利用递归分割(Split)字符串
利用递归分割(Split)字符串 SqlServer 递归 工作需要将表里的某个字段分割之后再插入到另一个表中,其实数据量不大,直接用游标一行一行的取,再利用循环来分割之后再实现数据的插入应该可以直接 ...
- 3.2 手机中的数据库——SQLite
http://www.sqlite.org/download.html 截至我安装SQLite数据库为止的时间,最新的版本可以下载sqlite-dll-win64-x64-3200000.zip和sq ...
- selenium3 + python - css定位
一.css:属性定位 1.css可以通过元素的id.class.标签这三个常规属性直接定位到 2.如下是百度输入框的的html代码: <input id="kw" class ...
- sublime text 快键键
sublime text 的快捷键ctrl+l 选择整行(按住-继续选择下行)ctrl+shift+k ...
- .net MVC成长记录(四)Linq(1)
今天不忙,没什么事情,继续写写随笔. 之前的文章写到了EF,很多人留言EF的操作用什么? 今天,就继续给大家分享EF的操作, Linq . 先从Linq操作Object内置对象开始 从Linq的基础 ...
- .htaccess的基本用法与介绍
●自定义错误页 .htaccess的一个应用是自定义错误页面,这将使你可以拥有自己的.个性化的错误页面(例如找不到文件时),而不是你的服务商提供的错误页或没有任何页面.这会让你的网站在出错的时候看上去 ...
- ie8及其以下版本兼容性问题之placeholder实现
1. 普通浏览器下修改placeholder颜色 因为每个浏览器的CSS选择器都有所差异,所以需要针对每个浏览器做单独的设定. 示例: input::-webkit-input-placeholder ...