NYOJ 598 旋转圆柱矩阵

旋转圆柱矩阵

时间限制:1000 ms  |  内存限制:65535 KB

难度:3

描述

将圆柱体的侧面展开能得到一个m*n的矩形。这是姑且看成一个01矩阵, 我们需要通过特定的移动得到另一个矩阵(该矩阵其中任意的某一列全部为1),每一次只能移动一行,且只能移动一位,可以向左移动,也可以向右移动,求最小的移动步数,如不能通过移动得到结果,则输出“-1”。

例如:

3*5的矩阵

00001

10000

00001

我们只需要将第二行向左移动一位即可得到所求。

输入
第一行一个整数N(N<=10),表示测试数据的组数。

第二行两个整数m n( 1 <= n , m <= 200),表示矩阵的行数和列数。

接下来m行,其中每一行n个数字。

输出
如果该矩阵可以移动得到结果,则每行一个数字,表示最小的移动步数。

否则输出-1。

样例输入
2
3 5
00001
10000
00001
3 4
0001
0100
0001
样例输出
1
2
AC码:
#include<stdio.h>
#include<string.h>
int num[205][205],sum[205];
int main()
{
	int T,n,m,a,b,i,j,min,flag;
	char str[205];
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&m);
		for(i=0;i<n;i++)
		{
			scanf("%s",str);
			flag=0;
			for(j=0;str[j]!=‘\0‘;j++)
			{
				num[i][j]=str[j]-‘0‘;
				if(num[i][j]==1)
					flag=1;
			}
		}

		if(flag==0)
		{
			printf("-1\n");
			continue;
		}
		memset(sum,0,sizeof(sum));
		for(i=0;i<n;i++)
		{
			for(j=0;j<m;j++)
			{
				if(num[i][j]==0)
				{
					a=j;
					b=j;
					while((num[i][a]==0)&&(num[i][b]==0))
					{
						a=(a+m-1)%m;
						b=(b+m+1)%m;
						sum[j]++;
					}
				}
			}
		}
		min=999999999;
		for(i=0;i<m;i++)
		{
			if(min>sum[i])
				min=sum[i];
		}
		printf("%d\n",min);
	}
	return 0;
}

时间: 2024-08-27 19:14:23

NYOJ 598 旋转圆柱矩阵的相关文章

旋转正方形矩阵

Problem: 旋转正方形矩阵[题目] 给定一个整型正方形矩阵matrix, 请把该矩阵调整成顺时针旋转90度的样子. [要求] 额外空间复杂度为O(1). Solution: 同样,采用由外向内一圈一圈变换,找到元素变换位置的规律即可. 难点在于区分偶数维矩阵和奇数维矩阵的不同操作 Code: 1 #pragma once 2 3 #include <iostream> 4 using namespace std; 5 6 template<class T> 7 void Ro

c++ 知道旋转前后矩阵向量值 求旋转矩阵c++/c#代码 知道两个向量求他们的旋转矩阵

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12115244.html 知道旋转前后矩阵向量值 如何去求旋转矩阵R 的c++/c#代码??? 因为需要用到矩阵处理库所以需要先配置 一.Eigen库的配置(VS2017) Eigen库下载: http://eigen.tuxfamily.org/index.php?title=Main_Page 下载文件并解压: 然后在自己的VS工程属性中的这个附加包含进去 注意看清楚了 是D:\Depen

绕任意轴旋转的矩阵推导总结

前言 常用的几何变换中旋转是较为复杂的一种,最近看<Physically Based Rendering, Second Edition: From Theory To Implementation>一书涉及绕任意轴旋转的实现,也给出了大体思路,但具体的推导过程及最后的旋转矩阵并未直接地给出,故根据参考Animated CGEM: Rotation About an Arbitrary Axis总结(欢迎指正). (一)基础 1.点乘与叉乘 点乘(dot)亦称作内积或数量积,如图,a·b =

[CareerCup] 11.3 Search in Rotated Sorted Array 在旋转有序矩阵中搜索

11.3 Given a sorted array of n integers that has been rotated an unknown number of times, write code to find an element in the array. You may assume that the array was originally sorted in increasing order. EXAMPLE Input: find 5 in {15, 16, 19, 20, 2

NYOJ 298 相变点(矩阵高速功率)

点的变换 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描写叙述 平面上有不超过10000个点.坐标都是已知的.如今可能对全部的点做下面几种操作: 平移一定距离(M),相对X轴上下翻转(X),相对Y轴左右翻转(Y),坐标缩小或放大一定的倍数(S),全部点对坐标原点逆时针旋转一定角度(R). 操作的次数不超过1000000次,求终于全部点的坐标. 提示:假设程序中用到PI的值,能够用acos(-1.0)获得. 输入 仅仅有一组測试数据 測试数据的第一行是两个整数N,M,分

顺时针打印旋转打印矩阵

#include "stdafx.h" #include <iostream> using namespace std; void loopShow(int s[][6],int m,int n) { int min_i=0,max_i=m-1; int min_j=0,max_j=n-1; while(min_i<=max_i && min_j<=max_j) { for(int k=min_j;k<max_j;k++) { cout&l

构建绕任意轴旋转的矩阵

转载请注明出处:http://www.cnblogs.com/jietian331/p/5634039.html

旋转一个矩阵

You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Note: You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the

矩阵的平移、旋转与缩放

世界坐标中的一个点乘以一个四维矩阵,可以实现平移,旋转和缩放等等. 平移就是,旋转和缩放就是(M分别是对应的旋转缩放矩阵) 当中为0时,是向量,为1时,是坐标. 平移, 旋转, 缩放,