AOJ102材质贴图
程序员文章站
2022-06-11 14:50:22
...
3D游戏中的场景经常用材质贴图来表现,例如石头、水面等。 通常,材质贴图是一张正方形的位图,上下边界的像素对应相同,左右边界的像素也对应相同。例如下图中,左边是一张材质贴图,而右边的不是(左右边界不同)。
给定一张n×n的位图,请在这张位图中寻找一块材质贴图,使得材质贴图尺寸最大。下图中黄色区域就是最大的材质贴图。
输入包含多组数据。
每组数据第一行是一个整数n (1≤n≤50),表示位图的大小。
然后n行每行n个在0到255之间的整数,描述位图的内容。
输入数据以n=0结束,不要处理这组数据。
对每组数据输出最大的材质贴图的边长。请注意,1×1的位图也是材质贴图。
可见格式 | 带空格和换行符的格式 | 带空格和换行符的格式说明 |
2 255 0 0 127 5 5 251 127 11 195 23 13 0 13 23 211 0 13 0 67 211 13 0 13 23 1 251 127 11 47 0
Original | Transformed | 带空格和换行符的格式说明 |
1 3
无
第二届招商银行杯程序设计大赛 普及组
#include <stdio.h>
int arr[55][55],a1,b1;
int dfs(int i,int j,int k)
{
for(a1=i;a1<=i+k;a1++)
{
if(arr[a1][j]!=arr[a1][j+k]) return 1;
}
for(b1=j;b1<=j+k;b1++)
{
if(arr[i][b1]!=arr[i+k][b1]) return 1;
}
return 2;
}
int main(){
int n,i,j,k;
while(1){
int max=0;
scanf("%d",&n);
if(!n) break;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
scanf("%d",&arr[i][j]);
}
}
// printf("%d",arr[0][0]);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
for(k=0;k+j<=n&&k+i<=n;k++)
{
if(arr[i][j]==arr[i][j+k]&&arr[i][j]==arr[i+k][j]
&&arr[i][j]==arr[i+k][j+k])
{
// printf("%d %d %d===",i,j,k);
int temp=dfs(i,j,k);//是1不满足
// printf("%d==",temp);
if(temp==2){
if(max<k) max=k;
// printf("%d\n",max);
}
}
}
}
}
printf("%d\n",max+1);
}
return 0;
}
上一篇: Asp.Net mvc基础
下一篇: 阿里云服务器部署django项目流程?