首页 技术 正文
技术 2022年11月18日
0 收藏 570 点赞 4,940 浏览 1753 个字

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

#include<stdio.h>
#include<string.h>
#include <iostream>using namespace std;
#define N 60int 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是右。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,400
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,895