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

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Maschinelles Lernen macht Computergrafiksimulationen (CG) realistischer! Die Methode heißt Neural Flow Maps (NFM) und kann Rauch mit vier Wirbeln genau simulieren. Komplexere lassen sich auch leicht realisieren: Wissen Sie, in Zeiten von KI-Anwendungen, die über den ganzen Himmel fliegen, ist die CG-Physiksimulation immer noch das Richtige ist die Welt der traditionellen numerischen Algorithmen. △NFM simuliert „Überspringen“. Obwohl die Anwendung neuronaler Netze in CG atemberaubende visuelle Effekte erzeugen kann, können physikalische Eigenschaften nicht streng und robust beschrieben werden. △NFM simuliert „Tintentröpfchen“. Genau aus diesem Grund befindet sich die physikalische Simulation auf Basis neuronaler Netze noch im Proof-of-Concept-Stadium und die erzeugten Effekte sind weit von SOTA entfernt. Um dieses komplexe Problem zu lösen,

Transformer ist zu einer beliebten Wahl für verschiedene maschinelle Lernaufgaben geworden und hat großartige Ergebnisse erzielt. Wie kann es also sonst verwendet werden? Forscher mit großer Fantasie wollen damit tatsächlich programmierbare Computer entwerfen! Die Autoren dieses Papiers mit dem Titel „Looped Transformers as Programmable Computers“ stammen von der Princeton University und der University of Wisconsin und wollen untersuchen, wie Transformers zur Implementierung von Allzweckcomputern verwendet werden können. Konkret schlagen die Autoren einen Rahmen für die Verwendung von Transformatornetzwerken als Allzweckcomputer vor, indem sie mit bestimmten Gewichten programmiert und in Schleifen platziert werden. in diesem Rahmen

Kürzlich gab Samsung die Übernahme von Oxford Semantic Technologies, einem britischen Knowledge-Graph-Startup, bekannt, um seine lokalen KI-Fähigkeiten zu verbessern und Benutzern ein personalisierteres KI-Erlebnis zu bieten. Das Hauptprodukt des Unternehmens ist die KI-Engine RDFox, die Wissensgraphentechnologie nutzt, um Informationen als vernetztes Netzwerk zu speichern. Die Art und Weise, wie sie Daten verarbeitet, ähnelt dem menschlichen Denken: Wissen erwerben, speichern, abrufen und darüber nachdenken. Diese Technologie wird das Verständnis des Geräts für die von Benutzern genutzten Produkte oder Dienstleistungen verbessern und so einen schnellen Informationsabruf und Empfehlungen ermöglichen. Es wird davon ausgegangen, dass Oxford Semantic Technologies 2017 von drei Professoren der Universität Oxford, Ian Horrocks, Boris Motik und Bernardo Cuenca, gegründet wurde.

PHP- und WebDriver-Erweiterungen: So simulieren Sie das Scroll- und Ziehverhalten von Benutzern Mit der kontinuierlichen Entwicklung von Netzwerkanwendungen müssen immer mehr Websites und Anwendungen das Scroll- und Ziehverhalten von Benutzern simulieren. Dies ist für Tester und Entwickler sehr wichtig, um sicherzustellen, dass Websites und Anwendungen in verschiedenen Szenarien ordnungsgemäß funktionieren. In diesem Artikel stellen wir vor, wie Sie PHP- und WebDriver-Erweiterungen verwenden, um das Scroll- und Ziehverhalten von Benutzern zu simulieren. WebDriver ist ein Tool zur Automatisierung von Browsern,

So verwenden Sie GitLab für API-Tests und -Simulationen. Einführung: Im Prozess der Softwareentwicklung ist das Testen und Simulieren von APIs (Application Programming Interface, Anwendungsprogrammierschnittstelle) ein sehr wichtiger Schritt. Es kann Entwicklern helfen, die Richtigkeit und Leistung der API zu überprüfen. und kann potenzielle Probleme im Voraus erkennen. GitLab ist eine sehr beliebte Code-Hosting-Plattform, die Funktionen wie Versionskontrolle und Teamzusammenarbeit implementiert. In diesem Artikel wird die Verwendung von Git vorgestellt

Verwenden Sie das Paket math/rand für die Simulation von Zufallszahlen: Importieren Sie das Paket math/rand. Verwenden Sie time.Now().UnixNano(), um den Zufallszahlengenerator zu initialisieren. Verwenden Sie rand.Intn(n), um eine zufällige Ganzzahl zwischen 0 und n-1 zu generieren. Verwenden Sie rand.Float64(), um eine Gleitkommazahl zwischen 0 und 1 zu generieren.

Python und Quantencomputing, zwei scheinbar weit entfernte und völlig unterschiedliche Bereiche, sind auf unglaubliche Weise miteinander verflochten und ergeben einen harmonischen Klang aus Algorithmen und Quantenzuständen, der eine großartige Symphonie der digitalen Welt komponiert. Die Einfachheit und Eleganz von Python und das Wunder und Geheimnis des Quantencomputings kollidieren miteinander und erzeugen unendliche Funken, die aufregende Möglichkeiten zur Lösung komplexer Probleme bieten und eine neue Ära des Quantencomputings eröffnen. Python, eine beliebte Programmiersprache, ist aufgrund ihrer einfachen Erlernbarkeit, ihrer umfangreichen Bibliotheken und ihres breiten Anwendungsspektrums zu einem unverzichtbaren Werkzeug im Bereich des Quantencomputings geworden. Das Aufkommen von Python hat die Schwelle des Quantencomputings gesenkt und es mehr Menschen ermöglicht, an Forschung und Anwendungen in diesem hochmodernen Bereich teilzunehmen. Die zahlreichen Python-Bibliotheken wie NumPy und SciPy für Quantencomputing

1. Einführung JUnit ist das beliebteste Unit-Test-Framework in der Java-Sprache, das das Schreiben und Verwalten von lesbarem, wartbarem und zuverlässigem Testcode erleichtert. Dieses Handbuch enthält Schritt-für-Schritt-Anleitungen, Codebeispiele und Best-Practice-Tipps, die Ihnen dabei helfen, JUnit effektiv zum Testen von Java-Anwendungen zu nutzen. 2. Erste Schritte 2.1 Einrichten des Testprojekts Fügen Sie dem Projekt eine JUnit-Abhängigkeit hinzu, um die Testfunktionalität zu aktivieren. Wenn Sie Maven verwenden, fügen Sie die folgende Abhängigkeit in die Datei pom.xml ein: junitjunit
