찾다
데이터 베이스MySQL 튜토리얼USACO 1.2.2 Transformations(模拟)

分析 这是我第一次在ACM的题目中用OO的思想写的程序,看到标程,竟不谋而合,结构是类的。对正方形这个类分析,将会使问题变得简单,我觉得OO的分析和设计挺关键的,其实我一开始也没设计好,原先准备把7个bool函数当成类的成员方法,其实这个设计是不好的,

分析

       这是我第一次在ACM的题目中用OO的思想写的程序,看到标程,竟不谋而合,结构是类似的。对正方形这个类分析,将会使问题变得简单,我觉得OO的分析和设计挺关键的,其实我一开始也没设计好,原先准备把7个bool函数当成类的成员方法,其实这个设计是不好的,有点过了。其实应该是把旋转90度轴对称这两个方法作为类的成员方法,这样main中调用就方便自如了。

       最后,我觉得搞ACM,不仅是把题目A掉,同时也应注意程序的结构设计,因为”程序是给人看的“。


2013/3/31

       关于顺时针旋转90度,怎么由原来的坐标得到转换后的坐标,可以用计算机图像学里二维变换的知识,将连续推广到离散的,如下图所示。

       为了与二维数组对应,我将坐标系顺时针旋转了90度,这样就与二维数组的下标情况对应了,假设n为4。


USACO 1.2.2 Transformations(模拟)


关于变换矩阵,先把参考点移到原点,再顺时针旋转90度,最后移回原来参考点。复合变换矩阵:

USACO 1.2.2 Transformations(模拟)

MATLAB程序如下:

clc;
clear all;
syms x y n;

P = [x y 1];
xF = (n - 1) / 2.0;   % center = (xF yF)
yF = xF;
% theta = -pi / 2.0;

Tt1 = [
    1 0 0;
    0 1 0;
    -xF -yF 1
    ];

% 精度有损失
% Tr = [
%     cos(theta) sin(theta) 0;
%     -sin(theta) cos(theta) 0;
%     0 0 1
%     ];

Tr = [
    0 -1 0;
    1 0 0;
    0 0 1
    ];

Tt2 = [
    1 0 0;
    0 1 0;
    xF yF 1
    ];

Pt = P * Tt1 * Tr * Tt2;

display(P);
display(Pt);
变换结果
P =
 
[ x, y, 1]
 
 
Pt =
 
[ y, n - x - 1, 1]


源程序

// #define ONLINE_JUDGE
#define MY_DEBUG
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cstdio>
#include <cassert>
using namespace std;

class Square {
private:
	typedef vector<char> vChar;
	typedef vector<vchar> vvChar;
	vvChar data;
	unsigned n;

public:
	// 用边长来构造
	Square (unsigned _n) : n(_n) {}

	Square rotateClockwise90() {
		Square tmp(n);
		for (unsigned int i = 0; i data[n - 1 - j][i]);
			}
			tmp.data.push_back(vcTmp);
		}

		return tmp;
	}

	Square rotateClockwise180() {
		return this->rotateClockwise90().rotateClockwise90();
	}

	Square rotateClockwise270() {
		return this->rotateClockwise180().rotateClockwise90();
	}

	Square reflecteHorizontal() {
		Square tmp(n);
		for (unsigned int i = 0; i data[i][n - j - 1]);
			}
			tmp.data.push_back(vcTmp);
		}

		return tmp;	
	}

	bool operator==(const Square &other) const {
		if (this->n != other.n) {
			return false;
		}

		for (unsigned i = 0; i data[i][j] != other.data[i][j]) {
					return false;
				}
			}
		}

		return true;
	}

	friend istream & operator>>(istream& is, Square &s) {
		for (unsigned int i = 0; i > cTmp;
				vcTmp.push_back(cTmp);
			}
			s.data.push_back(vcTmp);
		}

		return is;
	}

	friend ostream & operator= 1) {
				cout = 1) {
					cout > sideLen;
	Square sa(sideLen);
	Square sb(sideLen);
	cin >> sa >> sb;

#ifndef MY_DEBUG
	cout 
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p>附:</p>
<h3 id="标程">标程</h3>
<p>注:它的旋转函数中坐标变换错了。</p>

<pre class="brush:php;toolbar:false">#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

#define MAXN 10

typedef struct Board Board;
struct Board {
    int n;
    char b[MAXN][MAXN];
};

/* rotate 90 degree clockwise: [r, c] -> [c, n+1 - r] */
Board
rotate(Board b)
{
    Board nb;
    int r, c;

    nb = b;
    for(r=0; r<b.n r for c nb.b b.b return nb reflect board horizontally:> [r, n-1 -c] */
Board
reflect(Board b)
{
    Board nb;
    int r, c;

    nb = b;
    for(r=0; r<b.n r for c nb.b b.b return nb non-zero if and only boards are equal int eqboard b board bb bb.n bb.b rdboard n b.n="n;" getc assert void main file change fin='fopen("transform.in",' fout='fopen("transform.out",' null fscanf rotate else reflect fprintf exit><br>

<h3 id="题目">题目</h3>


<center>
<strong><span>Transformations</span></strong><br>
</center>

<p>A square pattern of size N x N (1 
</p>
<ul>
<li>#1: 90 Degree Rotation: The pattern was rotated clockwise 90 degrees.</li>
<li>#2: 180 Degree Rotation: The pattern was rotated clockwise 180 degrees.</li>
<li>#3: 270 Degree Rotation: The pattern was rotated clockwise 270 degrees.</li>
<li>#4: Reflection: The pattern was reflected horizontally (turned into a mirror image of itself by reflecting around a vertical line in the middle of the image).</li>
<li>#5: Combination: The pattern was reflected horizontally and then subjected to one of the rotations (#1-#3).</li>
<li>#6: No Change: The original pattern was not changed.</li>
<li>#7: Invalid Transformation: The new pattern was not obtained by any of the above methods.</li>
</ul>
<p>In the case that more than one transform could have been used, choose the one with the minimum number above.</p>
<h3 id="PROGRAM-NAME-transform">PROGRAM NAME: transform</h3>
<h3 id="INPUT-FORMAT">INPUT FORMAT</h3>
<table>
<tbody>
<tr>
<td>Line 1:</td>
<td>A single integer, N</td>
</tr>
<tr>
<td>Line 2..N+1:</td>
<td>N lines of N characters (each either `@' or `-'); this is the square before transformation</td>
</tr>
<tr>
<td>Line N+2..2*N+1:</td>
<td>N lines of N characters (each either `@' or `-'); this is the square after transformation</td>
</tr>
</tbody>
</table>
<h3 id="SAMPLE-INPUT-file-transform-in">SAMPLE INPUT (file transform.in)</h3>
<pre class="brush:php;toolbar:false">3
@-@
---
@@-
@-@
@--
--@

OUTPUT FORMAT

A single line containing the the number from 1 through 7 (described above) that categorizes the transformation required to change from the `before' representation to the `after' representation.

SAMPLE OUTPUT (file transform.out)

1


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
把Transformer当通用计算机用,还能执行in-context learning算法,这项研究脑洞大开把Transformer当通用计算机用,还能执行in-context learning算法,这项研究脑洞大开Apr 13, 2023 am 11:31 AM

Transformer 已成为各种机器学习任务的热门选择,并且取得了很好的效果,那它还能怎么用?脑洞大开的研究者竟然想用它来设计可编程计算机!这篇论文的作者来自普林斯顿大学和威斯康星大学,标题为《Looped Transformers as Programmable Computers》,旨在探索如何用 Transformer 来实现通用计算机。具体来说,作者提出了一个将 transformer 网络用作通用计算机的框架,方法是使用特定权重对它们进行编程并将它们置于循环(loop)中。在这个框架

AI模拟器拿下物理仿真新SOTA!AI模拟器拿下物理仿真新SOTA!Feb 19, 2024 pm 06:50 PM

机器学习让计算机图形学(CG)仿真更真实了!方法名为神经流向图(NeuralFlowMaps,NFM),四个涡旋的烟雾也能精确模拟的那种:更为复杂的也能轻松实现:要知道,在这个AI应用满天飞的时代,CG物理仿真仍然是传统数值算法的天下。△NFM模拟“蛙跳”尽管神经网络应用在CG能创造目眩神迷的视觉效果,它却无法严格、鲁棒地描述物理性质。△NFM模拟“墨滴”也正是因此,基于神经网络的物理仿真至今还处于概念验证(proofofconcept)的阶段,所生成的效果也远非SOTA。为了解决这个复杂问题,

如何利用GitLab进行API测试和模拟如何利用GitLab进行API测试和模拟Oct 27, 2023 pm 05:35 PM

如何利用GitLab进行API测试和模拟引言:在进行软件开发过程中,API(ApplicationProgrammingInterface,应用程序编程接口)测试和模拟是非常重要的一步,它可以帮助开发人员验证API的正确性和性能,并且可以提前发现潜在的问题。GitLab是一个非常流行的代码托管平台,实现了版本控制和团队协作等功能。本文将介绍如何利用Git

PHP和WebDriver扩展:如何模拟用户的滚动和拖拽行为PHP和WebDriver扩展:如何模拟用户的滚动和拖拽行为Jul 07, 2023 pm 04:15 PM

PHP和WebDriver扩展:如何模拟用户的滚动和拖拽行为随着网络应用的不断发展,越来越多的网站和应用程序需要模拟用户的滚动和拖拽行为。这对于测试人员和开发人员来说是非常重要的,以确保网站和应用程序在各种场景下都能正常工作。在本文中,我们将介绍如何使用PHP和WebDriver扩展来模拟用户的滚动和拖拽行为。WebDriver是一个用于自动化浏览器的工具,

三星收购英国知识图谱初创公司 本地 AI 模拟人类思考方式处理任务三星收购英国知识图谱初创公司 本地 AI 模拟人类思考方式处理任务Jul 19, 2024 pm 12:44 PM

近日,三星公司宣布收购英国知识图谱初创公司OxfordSemanticTechnologies,增强其本地AI功能,为用户提供更个性化的AI体验。该公司主要产品是AI引擎RDFox,通过知识图谱技术,将信息存储为互联网络,处理数据的方式类似于人类的思考方式:获取、记忆、回忆和推理知识。这技术将增强设备对用户使用产品或服务的理解,从而实现快速信息检索和推荐。据了解,OxfordSemanticTechnologies成立于2017年,由三位牛津大学教授伊恩·霍罗克斯、鲍里斯·莫蒂克和贝尔纳多·昆卡

如何在 Golang 中使用随机数进行模拟?如何在 Golang 中使用随机数进行模拟?Jun 06, 2024 pm 01:16 PM

使用math/rand包进行随机数模拟:导入math/rand包。使用time.Now().UnixNano()初始化随机数生成器。使用rand.Intn(n)生成0到n-1之间的随机整数。使用rand.Float64()生成0到1之间的浮点数。

Python与量子计算的壮丽交响:谱写算法与量子态的和谐之音Python与量子计算的壮丽交响:谱写算法与量子态的和谐之音Feb 19, 2024 pm 11:24 PM

蟒蛇和量子计算,这两个看似遥远且截然不同的领域,正以一种不可思议的方式相互交织,奏响了一曲算法与量子态的和谐之音,谱写出一段数字世界的壮丽交响曲。蟒蛇的简洁优雅与量子计算的奇妙玄妙,在交融中碰撞出无限的火花,为解决复杂问题提供了令人兴奋的可能性,开启了量子计算的新时代。蟒蛇作为一门流行的编程语言,凭借其易于学习、丰富的库和广泛的应用,成为量子计算领域不可或缺的工具。蟒蛇的出现,降低了量子计算的门槛,使更多的人能够参与到这一前沿领域的研究和应用中。蟒蛇的众多库,如NumPy和SciPy,为量子计算

Java JUnit 实践指南:编写可靠的测试Java JUnit 实践指南:编写可靠的测试Feb 19, 2024 pm 01:50 PM

1.引言JUnit是Java语言中最流行的单元测试框架,它使得编写和维护可读性强、可维护性好且可靠的测试代码变得容易。本指南将提供分步说明、代码示例和最佳实践技巧,以帮助您有效地使用JUnit进行Java应用程序测试。2.入门2.1设置测试项目在项目中添加JUnit依赖项以启用测试功能。使用Maven时,在pom.xml文件中添加以下依赖项:junitjunit

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구