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

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Pembelajaran mesin menjadikan simulasi grafik komputer (CG) lebih realistik! Kaedah ini dipanggil Peta Aliran Neural (NFM), yang boleh mensimulasikan asap dengan empat vorteks dengan tepat: yang lebih kompleks juga boleh direalisasikan dengan mudah: anda tahu, dalam era aplikasi AI ini terbang ke seluruh langit, simulasi fizik CG masih Ia ialah dunia algoritma berangka tradisional. △NFM mensimulasikan "leapfrog". Walaupun aplikasi rangkaian saraf dalam CG boleh mencipta kesan visual yang mempesonakan, ia tidak boleh menggambarkan sifat fizikal secara tegas dan mantap. △NFM mensimulasikan "titisan dakwat" Atas sebab inilah simulasi fizikal berdasarkan rangkaian saraf masih dalam peringkat pembuktian konsep, dan kesan yang dihasilkan adalah jauh daripada SOTA. Untuk menyelesaikan masalah yang kompleks ini,

Transformer telah menjadi pilihan popular untuk pelbagai tugas pembelajaran mesin dan telah mencapai hasil yang hebat, jadi bagaimana lagi ia boleh digunakan? Penyelidik yang mempunyai imaginasi yang hebat sebenarnya mahu menggunakannya untuk mereka bentuk komputer boleh atur cara! Pengarang kertas kerja ini, bertajuk "Transformers Bergelung sebagai Komputer Boleh Aturcara", berasal dari Universiti Princeton dan Universiti Wisconsin, dan bertujuan untuk meneroka cara menggunakan Transformers untuk melaksanakan komputer tujuan umum. Secara khusus, penulis mencadangkan rangka kerja untuk menggunakan rangkaian pengubah sebagai komputer tujuan umum dengan memprogramkannya dengan pemberat tertentu dan meletakkannya dalam gelung. dalam rangka kerja ini

Baru-baru ini, Samsung mengumumkan pemerolehan Oxford Semantic Technologies, sebuah syarikat permulaan graf pengetahuan British, untuk meningkatkan keupayaan AI tempatannya dan memberikan pengguna pengalaman AI yang lebih diperibadikan. Produk utama syarikat ialah RDFox enjin AI, yang menggunakan teknologi graf pengetahuan untuk menyimpan maklumat sebagai rangkaian yang saling berkaitan Cara ia memproses data adalah serupa dengan cara manusia berfikir: memperoleh, menghafal, mengingat dan menaakul tentang pengetahuan. Teknologi ini akan meningkatkan pemahaman peranti tentang produk atau perkhidmatan yang digunakan oleh pengguna, sekali gus membolehkan perolehan maklumat dan pengesyoran pantas. Difahamkan bahawa Oxford Semantic Technologies diasaskan pada 2017 oleh tiga profesor Universiti Oxford, Ian Horrocks, Boris Motik dan Bernardo Cuenca.

Sambungan PHP dan WebDriver: Cara mensimulasikan tingkah laku menatal dan menyeret pengguna Dengan pembangunan aplikasi rangkaian yang berterusan, semakin banyak tapak web dan aplikasi perlu mensimulasikan tingkah laku menatal dan menyeret pengguna. Ini sangat penting untuk penguji dan pembangun untuk memastikan tapak web dan aplikasi berfungsi dengan baik dalam pelbagai senario. Dalam artikel ini, kami akan memperkenalkan cara menggunakan sambungan PHP dan WebDriver untuk mensimulasikan tingkah laku menatal dan menyeret pengguna. WebDriver ialah alat untuk mengautomasikan penyemak imbas,

Cara menggunakan GitLab untuk ujian dan simulasi API Pengenalan: Dalam proses pembangunan perisian, ujian dan simulasi API (Antara Muka Pengaturcaraan Aplikasi, antara muka pengaturcaraan aplikasi) merupakan langkah yang sangat penting Ia boleh membantu pembangun mengesahkan ketepatan dan prestasi API, dan boleh Menemui masalah yang berpotensi lebih awal daripada masa. GitLab ialah platform pengehosan kod yang sangat popular yang melaksanakan fungsi seperti kawalan versi dan kerjasama pasukan. Artikel ini akan memperkenalkan cara menggunakan Git

Gunakan pakej matematik/rand untuk simulasi nombor rawak: import pakej matematik/rand. Gunakan time.Now().UnixNano() untuk memulakan penjana nombor rawak. Gunakan rand.Intn(n) untuk menjana integer rawak antara 0 dan n-1. Gunakan rand.Float64() untuk menjana nombor titik terapung antara 0 dan 1.

Python dan pengkomputeran kuantum, dua bidang yang kelihatan jauh dan berbeza sepenuhnya, dijalin dengan cara yang luar biasa, memainkan bunyi algoritma dan keadaan kuantum yang harmoni, menyusun simfoni dunia digital yang mengagumkan. Kesederhanaan dan keanggunan ular sawa serta keajaiban dan misteri pengkomputeran kuantum bertembung antara satu sama lain untuk mencipta percikan api yang tidak terhingga, memberikan kemungkinan menarik untuk menyelesaikan masalah yang kompleks dan membuka era baharu pengkomputeran kuantum. Python, bahasa pengaturcaraan yang popular, telah menjadi alat yang sangat diperlukan dalam bidang pengkomputeran kuantum kerana kemudahan pembelajarannya, perpustakaan yang kaya, dan pelbagai aplikasi. Kemunculan ular sawa telah merendahkan ambang pengkomputeran kuantum, membolehkan lebih ramai orang mengambil bahagian dalam penyelidikan dan aplikasi dalam bidang termaju ini. Banyak perpustakaan Python, seperti NumPy dan SciPy, untuk pengkomputeran kuantum

1. Pengenalan JUnit ialah rangka kerja ujian unit paling popular dalam bahasa Java, yang memudahkan untuk menulis dan mengekalkan kod ujian yang boleh dibaca, diselenggara dan boleh dipercayai. Panduan ini akan memberikan arahan langkah demi langkah, contoh kod dan petua amalan terbaik untuk membantu anda menggunakan JUnit untuk ujian aplikasi Java dengan berkesan. 2. Bermula 2.1 Sediakan projek ujian Tambah pergantungan JUnit pada projek untuk mendayakan kefungsian ujian. Apabila menggunakan Maven, tambahkan kebergantungan berikut dalam fail pom.xml: junitjunit
