http://poj.org/problem?id=1099

#include<stdio.h>
#include<string.h>
#include <iostream> using namespace std;
#define N 60 int x,y,n;
char mat[N][N]; struct node
{
int num,id;
int hang,lie;
} map[N][N]; void init()
{
int i,j;
memset(mat,,sizeof(mat));
for(i=; i<=x; i++) //空格 和 '*'
{
for(j=; j<=y; j++)
{
if(i== || i==x || j== || j==y) mat[i][j]='*';
else mat[i][j]=' ';
}
}
for(i=; i<x; i=i+) //H原子
{
for(j=; j<y; j=j+)
mat[i][j]='H';
}
for(i=; i<x; i=i+) //H原子
{
for(j=; j<y; j=j+)
mat[i][j]='H';
}
for(i=; i<x; i=i+) //O原子
{
for(j=; j<y; j=j+)
mat[i][j]='O';
}
}
void putmat()
{
int i,j;
for(i=; i<=x; i++)
{
for(j=; j<=y; j++)
printf("%c",mat[i][j]);
puts("");
}
}
int main()
{
int i,j,h,g,time=;
while(scanf("%d",&n),n)
{
if(time>)puts("");
memset(map,,sizeof(map));
y=*n+, x=*n-;//x行数,y列数
for(i=; i<=n; i++)
{
for(j=; j<=n; j++)
{
scanf("%d",&map[i][j].num);
map[i][j].id=n*(i-)+j;
map[i][j].hang=map[i][j].lie=map[i][j].num;
map[i][j].hang+=map[i][j-].hang;
map[i][j].lie+=map[i-][j].lie;
}
} init();
int k=;
for(i=; i<=x; i++)
{
for(j=; j<=y; j++)
{
if(mat[i][j]=='O')
{
int find=;
for(h=; h<=n; h++)
{
for(g=; g<=n; g++)
if(map[h][g].id==k)
{
find=,k++;
break;
}
if(find)break;
}
if(map[h][g].num==) mat[i][j-]='-',mat[i][j+]='-';
else if(map[h][g].num==-) mat[i-][j]='|',mat[i+][j]='|';
else if(map[h][g].num==)
{
if(map[h][g].hang==) mat[i][j-]='-';
else if(map[h][g].hang==) mat[i][j+]='-';
if(map[h][g].lie==) mat[i+][j]='|';
else if(map[h][g].lie==) mat[i-][j]='|';
}
}
}
}
printf("Case %d:\n\n",time++);
putmat();
}
return ;
}

找规律:

题目要求输出的图中如果先不管 H-O 键的话,也就是说光看 H 和 O 原子的话,它们的位置是有规律的,H 原子分两种,一种是从点(2,2)开始横,纵坐标分别以 4 递增,另一种是从点(4,4)开始横,纵坐标分别以 4 递增。而 O 原子的个数就是 n*n ,从(2,4)开始,以 4 递增。我们可以先画出一张没有 H-O 键的图来,然后在根据 数字矩阵中的值,给每一个 O 原子加上两个 H-O 键就可以了。

最后加上 H-O 键的时候,按 数字矩阵 分3种情况,1 和 -1 时,很好处理,关键是 0 的时候。仔细看题,有这么一句话: ……the sum of each row and column is 1  ……

就是这句了,解题点,根据 数字矩阵 中该行(或列)上 从开始到现在的点的数值和,可以判断,这个 H-O 键的方向:

上下:该列第一行到该行的数值和,0代表 H-O 在这个 O 原子下面,1是上。

左右:该行第一列到该列的数值和,0代表 H-O 在这个 O 原子左面,1是右。

poj 1099的更多相关文章

  1. POJ 1099 Square Ice

    Square Ice Description Square Ice is a two-dimensional arrangement of water molecules H2O, with oxyg ...

  2. POJ 1099 Square Ice 连蒙带猜+根据样例找规律

    目录 题面 思路 思路 AC代码 题面 Square Ice Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4526   A ...

  3. POJ题目排序的Java程序

    POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...

  4. POJ 题目分类(转载)

    Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...

  5. (转)POJ题目分类

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

  6. poj分类

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  7. poj 题目分类(1)

    poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...

  8. POJ 3286 How many 0's?(几多0?)

    POJ 3286 How many 0's?(几多0?) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] A Benedi ...

  9. POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)

    本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...

随机推荐

  1. Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询     SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...

  2. transition与visibility之间的小tips

    之前经常遇到这个问题,就是在用transition样式的时候经常不起作用,一个元素处于隐藏状态(display:none)时,通过添加一个class将元素显示出来,这样其实过度效果是不起作用的,懒做的 ...

  3. spring filter拦截器

    实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面.比较好的做法是不管什么人都不能直接访问jsp页面,要访问就通过action,这样就变成了一个实实在在的权限 ...

  4. 移动端关于meta的几个常用标签

    meta元素可提供有关某个 HTML 元素的元信息 (meta-information),比如描述.针对搜索引擎的关键词以及刷新频率. 用的最多的莫过于 [ charset ] 啦,用于指定整个htm ...

  5. VaR实现实证

    投资组合Var计算实例 http://financetrain.com/analytical-approach-to-calculating-var-variance-covariance-metho ...

  6. 百度UEditor基本使用

    1 首先奉上链接其http://ueditor.baidu.com/website/index.html 更多更详细内容在其官方api上,本文只是一个归类总结性文章. 2 下载链接http://ued ...

  7. 【转载】SQL Server 2008 r2 中 SQL语句中单引号转义

    sql server有两个转义符. 默认情况下, 单引号'是字符串的边界符, 如果在字符串中包含单引号', 则必须使用两个单引号', 第1个单引号'就是转义符.

  8. NopCommerce 框架系列(一)

    今天,终于抽出时间来写写博文,也希望自己能养成写博文的好习惯,大神勿喷. 我从NopCommerce官网上下载了源码,以便自己学习研究,如有需要下载源码的朋友,请点击链接: http://www.no ...

  9. rsync排除文件同步

    排除扩展名为log的文件 rsync -ave ssh --exclude '*.log' root@192.168.168.188:/website/abc.com/* /website/abc.c ...

  10. Linux下Hadoop2.6.0集群环境的搭建

    本文旨在提供最基本的,可以用于在生产环境进行Hadoop.HDFS分布式环境的搭建,对自己是个总结和整理,也能方便新人学习使用. 基础环境 JDK的安装与配置 现在直接到Oracle官网(http:/ ...