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。
关于变换矩阵,先把参考点移到原点,再顺时针旋转90度,最后移回原来参考点。复合变换矩阵:
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

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

난수 시뮬레이션을 위해 math/rand 패키지를 사용하세요. math/rand 패키지를 가져오세요. 난수 생성기를 초기화하려면 time.Now().UnixNano()를 사용하세요. rand.Intn(n)을 사용하여 0과 n-1 사이의 임의의 정수를 생성합니다. rand.Float64()를 사용하여 0과 1 사이의 부동 소수점 숫자를 생성합니다.

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

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