Heim Datenbank MySQL-Tutorial HDU 2276 Kiki & Little Kiki 2 (位运算+矩阵快速幂)

HDU 2276 Kiki & Little Kiki 2 (位运算+矩阵快速幂)

Jun 07, 2016 pm 03:25 PM
amp 矩阵 运算

HDU 2276 Kiki Little Kiki 2 (位运算矩阵快速幂) ACM 题目地址:HDU 2276 Kiki Little Kiki 2 题意 : 一排灯,开关状态已知,每过一秒:第i个灯会根据刚才左边的那个灯的开关情况变化,如果左边是开的,它就会变化,如果是关的,就保持原来状态。问m秒后

HDU 2276 Kiki & Little Kiki 2 (位运算+矩阵快速幂)

ACM

题目地址:HDU 2276 Kiki & Little Kiki 2

题意: 
一排灯,开关状态已知,每过一秒:第i个灯会根据刚才左边的那个灯的开关情况变化,如果左边是开的,它就会变化,如果是关的,就保持原来状态。问m秒后的状态。 
第1个的左边是最后一个。

分析: 
转移不好想啊。。。 
变化是这样的:

<ol>
<li><code><span>原来</span><span>左边</span><span>变化</span></code></li>
<li><code><span>1</span><span>1</span><span>0</span></code></li>
<li><code><span>1</span><span>0</span><span>1</span></code></li>
<li><code><span>0</span><span>1</span><span>1</span></code></li>
<li><code><span>0</span><span>0</span><span>0</span></code></li>
</ol>
Nach dem Login kopieren

然后想到 (~原来)^(左边)=变化 
发现搞不成矩阵TAT... 
看了别人题解后发现:(原来+左边)&2=变化,瞬间orz。 
不过这样想才没错,矩阵需要的是加法。

于是构造矩阵。见大神的矩阵:

<ol>
<li><code><span>"1 0 0...0 1</span></code></li>
<li><code><span> 1 1 0...0 0</span></code></li>
<li><code><span> 0 1 1...0 0</span></code></li>
<li><code><span> 0 0 1...0 0</span></code></li>
<li><code><span> ...........</span></code></li>
<li><code><span> 0 0 0...1 1</span></code></li>
<li><code><span>"</span></code></li>
</ol>
Nach dem Login kopieren

最后要注意,如果直接矩阵乘法%2会跪,因为数据太大了。 
这时候可以用位运算优化。 
我们注意到:(1+1)%2和1^1结果一样,1*1和1&1结果一样,所以相乘函数改下就行了。

代码

/*
*  Author:      illuz <iilluzen>
*  Blog:        http://blog.csdn.net/hcbbt
*  File:        2276.cpp
*  Create Date: 2014-08-03 22:47:12
*  Descripton:   
*/

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define repf(i,a,b) for(int i=(a);i>= 1;
	}
	return c;
}

void init() {
	cin >> s;
	int len = s.length();
	a.n = b.n = c.n = len;
	a.init(0);
	b.init(0);
	c.init(0);

	repf (i, 0, len - 1) {
		b.v[i][0] = s[i] - '0';
	}
	a.v[0][0] = a.v[0][a.n - 1] = 1;
	repf (i, 1, a.n - 1) {
		a.v[i][i] = a.v[i][i - 1] = 1;
	}
}

void solve(int n) {
	c = a ^ (n);
	c = c * b;
	repf (i, 0, c.n - 1) {
		printf("%d", c.v[i][0]);
	}
	puts("");
}

int main() {
	while (~scanf("%d", &n)) {
		init();
		solve(n);
	}
	return 0;
}
</cmath></algorithm></iostream></cstring></cstdio></iilluzen>
Nach dem Login kopieren


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1662
14
PHP-Tutorial
1261
29
C#-Tutorial
1234
24
Erkundung der Geschichte und Matrix der künstlichen Intelligenz: Tutorial zur künstlichen Intelligenz (2) Erkundung der Geschichte und Matrix der künstlichen Intelligenz: Tutorial zur künstlichen Intelligenz (2) Nov 20, 2023 pm 05:25 PM

Im ersten Artikel dieser Reihe haben wir die Zusammenhänge und Unterschiede zwischen künstlicher Intelligenz, maschinellem Lernen, Deep Learning, Datenwissenschaft und mehr diskutiert. Wir haben auch einige schwierige Entscheidungen hinsichtlich der Programmiersprachen, Tools und mehr getroffen, die in der gesamten Serie verwendet werden sollen. Abschließend haben wir noch ein wenig Matrixwissen eingeführt. In diesem Artikel werden wir die Matrix, den Kern der künstlichen Intelligenz, ausführlich besprechen. Aber vorher wollen wir zunächst die Geschichte der künstlichen Intelligenz verstehen. Warum müssen wir die Geschichte der künstlichen Intelligenz verstehen? In der Geschichte gab es viele KI-Booms, aber in vielen Fällen blieben die großen Erwartungen an das Potenzial der KI aus. Das Verständnis der Geschichte der künstlichen Intelligenz kann uns helfen zu erkennen, ob diese Welle der künstlichen Intelligenz Wunder bewirken wird oder nur eine weitere Blase ist, die kurz vor dem Platzen steht. uns

Python-Programm zur Berechnung der Summe der rechtsdiagonalen Elemente einer Matrix Python-Programm zur Berechnung der Summe der rechtsdiagonalen Elemente einer Matrix Aug 19, 2023 am 11:29 AM

Eine beliebte Allzweck-Programmiersprache ist Python. Es wird in einer Vielzahl von Branchen eingesetzt, darunter Desktop-Anwendungen, Webentwicklung und maschinelles Lernen. Glücklicherweise verfügt Python über eine einfache und leicht verständliche Syntax, die für Anfänger geeignet ist. In diesem Artikel verwenden wir Python, um die Summe der rechten Diagonalen einer Matrix zu berechnen. Was ist eine Matrix? In der Mathematik verwenden wir ein rechteckiges Array oder eine Matrix, um ein mathematisches Objekt oder seine Eigenschaften zu beschreiben. Es handelt sich um ein rechteckiges Array oder eine Tabelle, die in Zeilen und Spalten angeordnete Zahlen, Symbole oder Ausdrücke enthält. Zum Beispiel -234512367574. Dies ist also eine Matrix mit 3 Zeilen und 4 Spalten, ausgedrückt als 3*4-Matrix. Nun gibt es in der Matrix zwei Diagonalen, die Primärdiagonale und die Sekundärdiagonale

Python-Programm zum Multiplizieren zweier Matrizen mithilfe mehrdimensionaler Arrays Python-Programm zum Multiplizieren zweier Matrizen mithilfe mehrdimensionaler Arrays Sep 11, 2023 pm 05:09 PM

Eine Matrix ist eine Menge von Zahlen, die in Zeilen und Spalten angeordnet sind. Eine Matrix mit m Zeilen und n Spalten wird als mXn-Matrix bezeichnet, und m und n werden als ihre Dimensionen bezeichnet. Eine Matrix ist ein zweidimensionales Array, das in Python mithilfe von Listen oder NumPy-Arrays erstellt wird. Im Allgemeinen kann die Matrixmultiplikation durch Multiplikation der Zeilen der ersten Matrix mit den Spalten der zweiten Matrix erfolgen. Dabei sollte die Anzahl der Spalten der ersten Matrix gleich der Anzahl der Zeilen der zweiten Matrix sein. Eingabe- und Ausgabeszenario Angenommen, wir haben zwei Matrizen A und B. Die Abmessungen dieser beiden Matrizen betragen 2X3 bzw. 3X2. Die resultierende Matrix nach der Multiplikation hat 2 Zeilen und 1 Spalte. [b1,b2][a1,a2,a3]*[b3,b4]=[a1*b1+a2*b2+a3*a3][a4,a5,a6][b5,b6][a4*b2+a

Wie berechnet man die Determinante einer Matrix oder eines ndArrays mit Numpy in Python? Wie berechnet man die Determinante einer Matrix oder eines ndArrays mit Numpy in Python? Aug 18, 2023 pm 11:57 PM

In diesem Artikel erfahren Sie, wie Sie die Determinante einer Matrix mithilfe der Numpy-Bibliothek in Python berechnen. Die Determinante einer Matrix ist ein Skalarwert, der die Matrix in kompakter Form darstellen kann. Es ist eine nützliche Größe in der linearen Algebra und hat zahlreiche Anwendungen in verschiedenen Bereichen, darunter Physik, Ingenieurwesen und Informatik. In diesem Artikel besprechen wir zunächst die Definition und Eigenschaften von Determinanten. Anschließend lernen wir, wie man Numpy zur Berechnung der Determinante einer Matrix verwendet, und sehen anhand einiger Beispiele, wie es in der Praxis verwendet wird. Die Determinante einer Matrix ist ein Larwert, der zur Beschreibung der Eigenschaft verwendet werden kann

C-Programm zum Vergleich zweier Matrizen auf Gleichheit C-Programm zum Vergleich zweier Matrizen auf Gleichheit Aug 31, 2023 pm 01:13 PM

Der Benutzer muss die Reihenfolge der beiden Matrizen sowie die Elemente beider Matrizen eingeben. Vergleichen Sie dann die beiden Matrizen. Zwei Matrizen sind gleich, wenn beide Matrixelemente und -größen gleich sind. Wenn die Matrizen gleich groß, aber nicht gleich in den Elementen sind, werden die Matrizen als vergleichbar, aber nicht gleich dargestellt. Wenn die Größen und Elemente nicht übereinstimmen, können die Anzeigematrizen nicht verglichen werden. Das folgende Programm ist ein C-Programm, das verwendet wird, um zu vergleichen, ob zwei Matrizen gleich sind: #include<stdio.h>#include<conio.h>main(){ intA[10][10],B[10][10] ; In

Python-Programm: Vertauschen Sie die Positionen des ersten und letzten Elements in einer Matrix zwischen Spalten Python-Programm: Vertauschen Sie die Positionen des ersten und letzten Elements in einer Matrix zwischen Spalten Sep 08, 2023 pm 04:29 PM

Eine Matrix ist eine zweidimensionale Anordnung von Zahlen, die in Zeilen und Spalten angeordnet sind. Python verfügt über keinen Datentyp zur Darstellung von Matrizen, wir können jedoch verschachtelte Listen oder NumPy-Arrays als Matrizen verwenden. Sehen Sie sich die folgenden Eingabe- und Ausgabeszenarien an, um zu erfahren, wie Sie die ersten und letzten Spaltenelemente einer Matrix austauschen. Eingabe-Ausgabe-Szenario Angenommen, wir haben eine 3X3-Matrix, die durch eine Liste von Listen dargestellt wird. Die Ausgabematrix ist die resultierende Matrix aus dem Austausch der ersten und letzten Spaltenelemente. Eingabematrix:[1,3,4][4,5,6][7,8,3]Ausgabematrix:[4,3,1][4,5,6][3,8,7]Betrachten wir eine andere Eine Matrix, deren Zeilen und Spalten ungleich sind. Eingabematrix:

Wie storniere ich das Konto in der Matrix? Was bedeutet Matrixinversion? Wie storniere ich das Konto in der Matrix? Was bedeutet Matrixinversion? Mar 27, 2024 pm 12:16 PM

Im Social-Media-Bereich ist der Matrix-Account-Backflow eine gängige Strategie. Durch die Umleitung des Traffics zwischen verschiedenen Accounts können sich Fans gegenseitig ergänzen und ihre Aktivität steigern. Der Rückfluss zwischen Matrixkonten erfordert eine sorgfältige Planung und Ausführung und ist keine einfache Angelegenheit. In diesem Artikel wird ausführlich erläutert, wie eine Umkehrung zwischen verschiedenen Konten implementiert wird und welche Bedeutung die Matrixumkehr hat. 1. Wie storniere ich das Konto in der Matrix? Unter den Matrixkonten ist es entscheidend, ein Hauptkonto auszuwählen, das zur Hauptverkehrsquelle und Plattform für die Veröffentlichung von Kerninhalten wird. Bei der Inhaltsplanung geht es darum, entsprechende Inhaltspläne auf der Grundlage von Kontomerkmalen und Zielgruppen zu formulieren, um eine gleichbleibende Qualität und einen gleichbleibenden Stil der Inhalte sicherzustellen. 3. Empfehlen und liken Sie sich gegenseitig: Bewerben und liken Sie sich gegenseitig zwischen Matrix-Konten und führen Sie die Fans durch angemessene Layouts und Arrangements.

Analyse und Lösungen für PHP-Gleitkomma-Operationsprobleme Analyse und Lösungen für PHP-Gleitkomma-Operationsprobleme Feb 27, 2024 am 11:03 AM

PHP ist eine in der Website-Entwicklung weit verbreitete Skriptsprache. Aufgrund ihrer leistungsstarken Funktionen und Flexibilität ist sie für viele Entwickler das Werkzeug der Wahl. Allerdings hat PHP auch einige Probleme beim Umgang mit Gleitkommaoperationen, insbesondere wenn es um Präzision und Genauigkeit geht. In diesem Artikel werden PHP-Gleitkomma-Betriebsprobleme analysiert und einige Lösungen vorgeschlagen. Außerdem werden spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, diese Probleme besser zu verstehen und zu lösen. Problemanalyse In PHP sind Gleitkommazahlen ein Datentyp, der zur Darstellung von Dezimalzahlen verwendet wird.

See all articles