목차
分析
源程序
标程
题目
PROGRAM NAME: transform
INPUT FORMAT
SAMPLE INPUT (file transform.in)
OUTPUT FORMAT
SAMPLE OUTPUT (file transform.out)
데이터 베이스 MySQL 튜토리얼 USACO 1.2.2 Transformations(模拟)

USACO 1.2.2 Transformations(模拟)

Jun 07, 2016 pm 03:48 PM
시뮬레이션

分析 这是我第一次在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으로 문의하세요.

핫 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를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

AI 시뮬레이터는 물리 시뮬레이션에서 새로운 SOTA를 채택합니다! AI 시뮬레이터는 물리 시뮬레이션에서 새로운 SOTA를 채택합니다! Feb 19, 2024 pm 06:50 PM

머신 러닝을 통해 컴퓨터 그래픽(CG) 시뮬레이션을 더욱 현실감 있게 만들어보세요! 이 방법은 NFM(Neural Flow Maps)이라고 하며, 4개의 소용돌이로 연기를 정확하게 시뮬레이션할 수 있습니다. 더 복잡한 것 또한 쉽게 실현할 수 있습니다. AI 애플리케이션이 하늘을 날아다니는 이 시대에도 CG 물리 시뮬레이션은 여전히 ​​그렇습니다. 전통적인 수치 알고리즘의 세계입니다. △NFM은 '도약(leapfrog)'을 시뮬레이션합니다. CG에 신경망을 적용하면 눈부신 시각적 효과를 낼 수 있지만 물리적 특성을 엄격하고 확실하게 설명할 수는 없습니다. △NFM이 '잉크 방울'을 시뮬레이션하는 이유는 신경망을 기반으로 한 물리적 시뮬레이션이 아직 개념 증명 단계에 있고, 생성되는 효과가 SOTA와는 거리가 멀기 때문입니다. 이 복잡한 문제를 해결하기 위해,

Transformer를 범용 컴퓨터로 사용하면 상황 내 학습 알고리즘을 실행할 수도 있습니다. 이 연구는 매우 상상력이 풍부합니다. Transformer를 범용 컴퓨터로 사용하면 상황 내 학습 알고리즘을 실행할 수도 있습니다. 이 연구는 매우 상상력이 풍부합니다. Apr 13, 2023 am 11:31 AM

Transformer는 다양한 기계 학습 작업에 널리 사용되며 훌륭한 결과를 얻었습니다. 그렇다면 또 어떻게 사용할 수 있을까요? 상상력이 뛰어난 연구자들은 실제로 이를 사용하여 프로그래밍 가능한 컴퓨터를 설계하고 싶어합니다! "프로그램 가능한 컴퓨터로서의 루프형 트랜스포머"라는 제목의 이 논문의 저자는 프린스턴 대학교와 위스콘신 대학교 출신이며, 트랜스포머를 사용하여 범용 컴퓨터를 구현하는 방법을 탐구하는 것을 목표로 합니다. 특히 저자는 특정 가중치로 프로그래밍하고 루프에 배치함으로써 변압기 네트워크를 범용 컴퓨터로 사용하기 위한 프레임워크를 제안합니다. 이 프레임워크에서

삼성, 영국 지식 그래프 스타트업 인수 로컬 AI가 인간의 사고를 시뮬레이션하여 작업 처리 삼성, 영국 지식 그래프 스타트업 인수 로컬 AI가 인간의 사고를 시뮬레이션하여 작업 처리 Jul 19, 2024 pm 12:44 PM

최근 삼성전자는 로컬 AI 역량을 강화하고 사용자에게 보다 개인화된 AI 경험을 제공하기 위해 영국 지식 그래프 스타트업 옥스포드 시맨틱 테크놀로지스(Oxford Semantic Technologies) 인수를 발표했습니다. 이 회사의 주요 제품은 지식 그래프 기술을 사용해 정보를 상호 연결된 네트워크로 저장하는 AI 엔진인 RDFox입니다. 데이터를 처리하는 방식은 인간이 지식을 획득하고, 기억하고, 회상하고, 추론하는 방식과 유사합니다. 이 기술은 사용자가 사용하는 제품이나 서비스에 대한 기기의 이해도를 높여 신속한 정보 검색 및 추천을 가능하게 합니다. Oxford Semantic Technologies는 2017년 옥스퍼드 대학교 교수 Ian Horrocks, Boris Motik 및 Bernardo Cuenca 세 명이 설립한 것으로 알려져 있습니다.

PHP 및 WebDriver 확장: 사용자 스크롤 및 드래그 동작을 시뮬레이션하는 방법 PHP 및 WebDriver 확장: 사용자 스크롤 및 드래그 동작을 시뮬레이션하는 방법 Jul 07, 2023 pm 04:15 PM

PHP 및 WebDriver 확장: 사용자의 스크롤 및 드래그 동작을 시뮬레이션하는 방법 네트워크 애플리케이션이 지속적으로 개발됨에 따라 점점 더 많은 웹사이트와 애플리케이션에서 사용자의 스크롤 및 드래그 동작을 시뮬레이션해야 합니다. 이는 테스터와 개발자가 웹사이트와 애플리케이션이 다양한 시나리오에서 제대로 작동하는지 확인하는 데 매우 중요합니다. 이 기사에서는 PHP 및 WebDriver 확장을 사용하여 사용자 스크롤 및 드래그 동작을 시뮬레이션하는 방법을 소개합니다. WebDriver는 브라우저를 자동화하는 도구입니다.

API 테스트 및 시뮬레이션에 GitLab을 사용하는 방법 API 테스트 및 시뮬레이션에 GitLab을 사용하는 방법 Oct 27, 2023 pm 05:35 PM

API 테스트 및 시뮬레이션을 위해 GitLab을 사용하는 방법 소개: 소프트웨어 개발 과정에서 API(애플리케이션 프로그래밍 인터페이스, 애플리케이션 프로그래밍 인터페이스) 테스트 및 시뮬레이션은 개발자가 API의 정확성과 성능을 확인하는 데 도움이 될 수 있습니다. 잠재적인 문제를 미리 발견할 수 있습니다. GitLab은 버전 제어 및 팀 협업과 같은 기능을 구현하는 매우 인기 있는 코드 호스팅 플랫폼입니다. 이번 글에서는 Git 사용법을 소개하겠습니다.

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 사이의 부동 소수점 숫자를 생성합니다.

파이썬과 양자 컴퓨팅의 웅장한 교향곡: 알고리즘과 양자 상태의 조화로운 사운드 구성 파이썬과 양자 컴퓨팅의 웅장한 교향곡: 알고리즘과 양자 상태의 조화로운 사운드 구성 Feb 19, 2024 pm 11:24 PM

겉으로는 멀고 완전히 다른 두 분야인 파이썬과 양자컴퓨팅은 놀라운 방식으로 얽혀 알고리즘과 양자 상태의 조화로운 소리를 연주하며 디지털 세계의 웅장한 교향곡을 구성합니다. 파이썬의 단순함과 우아함, 양자 컴퓨팅의 경이로움과 신비가 서로 충돌하여 무한한 불꽃을 일으키며 복잡한 문제를 해결하고 양자 컴퓨팅의 새로운 시대를 열 수 있는 흥미로운 가능성을 제공합니다. 널리 사용되는 프로그래밍 언어인 Python은 학습 용이성, 풍부한 라이브러리 및 광범위한 응용 프로그램으로 인해 양자 컴퓨팅 분야에서 없어서는 안될 도구가 되었습니다. 파이썬의 등장으로 양자컴퓨팅의 문턱이 낮아지면서 더 많은 사람들이 이 첨단 분야의 연구와 응용에 참여할 수 있게 됐다. 양자 컴퓨팅을 위한 NumPy 및 SciPy와 같은 Python의 수많은 라이브러리

Java JUnit 실용 가이드: 신뢰할 수 있는 테스트 작성 Java JUnit 실용 가이드: 신뢰할 수 있는 테스트 작성 Feb 19, 2024 pm 01:50 PM

1. 소개 JUnit은 Java 언어에서 가장 널리 사용되는 단위 테스트 프레임워크로, 읽기 쉽고 유지 관리가 가능하며 신뢰할 수 있는 테스트 코드를 쉽게 작성하고 유지 관리할 수 있도록 해줍니다. 이 가이드에서는 Java 애플리케이션 테스트에 JUnit을 효과적으로 사용하는 데 도움이 되는 단계별 지침, 코드 예제 및 모범 사례 팁을 제공합니다. 2. 시작하기 2.1 테스트 프로젝트 설정 프로젝트에 JUnit 종속성을 추가하여 테스트 기능을 활성화합니다. Maven을 사용하는 경우 pom.xml 파일에 다음 종속성을 추가하십시오. junitjunit

See all articles