Rumah pangkalan data tutorial mysql HDU 2276 Kiki & Little Kiki 2 (位运算+矩阵快速幂)

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

Jun 07, 2016 pm 03:25 PM
amp matriks Operasi

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>
Salin selepas log masuk

然后想到 (~原来)^(左边)=变化 
发现搞不成矩阵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>
Salin selepas log masuk

最后要注意,如果直接矩阵乘法%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>
Salin selepas log masuk


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Meneroka Sejarah dan Matriks Kepintaran Buatan: Tutorial Kepintaran Buatan (2) Meneroka Sejarah dan Matriks Kepintaran Buatan: Tutorial Kepintaran Buatan (2) Nov 20, 2023 pm 05:25 PM

Dalam artikel pertama siri ini, kami membincangkan hubungan dan perbezaan antara kecerdasan buatan, pembelajaran mesin, pembelajaran mendalam, sains data dan banyak lagi. Kami juga membuat beberapa pilihan sukar tentang bahasa pengaturcaraan, alatan dan banyak lagi yang akan digunakan oleh keseluruhan siri. Akhirnya, kami juga memperkenalkan sedikit ilmu matriks. Dalam artikel ini, kita akan membincangkan secara mendalam matriks, teras kecerdasan buatan. Tetapi sebelum itu, mari kita fahami dahulu sejarah kecerdasan buatan. Mengapa kita perlu memahami sejarah kecerdasan buatan? Terdapat banyak ledakan AI dalam sejarah, tetapi dalam banyak kes jangkaan besar untuk potensi AI gagal menjadi kenyataan. Memahami sejarah kecerdasan buatan boleh membantu kita melihat sama ada gelombang kecerdasan buatan ini akan mencipta keajaiban atau hanya gelembung lain yang akan pecah. kami

Program Python untuk mengira jumlah unsur pepenjuru yang betul bagi matriks Program Python untuk mengira jumlah unsur pepenjuru yang betul bagi matriks Aug 19, 2023 am 11:29 AM

Bahasa pengaturcaraan tujuan umum yang popular ialah Python. Ia digunakan dalam pelbagai industri, termasuk aplikasi desktop, pembangunan web dan pembelajaran mesin. Nasib baik, Python mempunyai sintaks yang ringkas dan mudah difahami yang sesuai untuk pemula. Dalam artikel ini, kita akan menggunakan Python untuk mengira jumlah pepenjuru kanan matriks. Apakah matriks? Dalam matematik, kami menggunakan tatasusunan atau matriks segi empat tepat untuk menerangkan objek matematik atau sifatnya Ia adalah tatasusunan atau jadual segi empat tepat yang mengandungi nombor, simbol atau ungkapan yang disusun dalam baris dan lajur. Contohnya -234512367574 Oleh itu, ini ialah matriks dengan 3 baris dan 4 lajur, dinyatakan sebagai matriks 3*4. Kini, terdapat dua pepenjuru dalam matriks, pepenjuru primer dan pepenjuru sekunder

Bagaimana untuk mengira penentu matriks atau ndArray menggunakan numpy dalam Python? Bagaimana untuk mengira penentu matriks atau ndArray menggunakan numpy dalam Python? Aug 18, 2023 pm 11:57 PM

Dalam artikel ini, kita akan belajar cara mengira penentu matriks menggunakan perpustakaan numpy dalam Python. Penentu matriks ialah nilai skalar yang boleh mewakili matriks dalam bentuk padat. Ia merupakan kuantiti yang berguna dalam algebra linear dan mempunyai banyak aplikasi dalam pelbagai bidang termasuk fizik, kejuruteraan, dan sains komputer. Dalam artikel ini, kita akan membincangkan definisi dan sifat penentu terlebih dahulu. Kami kemudian akan belajar cara menggunakan numpy untuk mengira penentu matriks dan melihat cara ia digunakan dalam amalan melalui beberapa contoh. Penentu kefamatriks ialah nilai skala yang boleh digunakan untuk menerangkan sifat

Program Python untuk mendarab dua matriks menggunakan tatasusunan berbilang dimensi Program Python untuk mendarab dua matriks menggunakan tatasusunan berbilang dimensi Sep 11, 2023 pm 05:09 PM

Matriks ialah satu set nombor yang disusun dalam baris dan lajur. Matriks dengan m baris dan n lajur dipanggil matriks mXn, dan m dan n dipanggil dimensinya. Matriks ialah tatasusunan dua dimensi yang dibuat dalam Python menggunakan senarai atau tatasusunan NumPy. Secara umum, pendaraban matriks boleh dilakukan dengan mendarab baris matriks pertama dengan lajur matriks kedua. Di sini, bilangan lajur matriks pertama hendaklah sama dengan bilangan baris matriks kedua. Senario input dan output Katakan kita mempunyai dua matriks A dan B. Dimensi kedua-dua matriks ini ialah 2X3 dan 3X2 masing-masing. Matriks yang terhasil selepas pendaraban akan mempunyai 2 baris dan 1 lajur. [b1,b2][a1,a2,a3]*[b3,b4]=[a1*b1+a2*b2+a3*a3][a4,a5,a6][b5,b6][a4*b2+a

Program C untuk membandingkan dua matriks untuk kesamaan Program C untuk membandingkan dua matriks untuk kesamaan Aug 31, 2023 pm 01:13 PM

Pengguna mesti memasukkan susunan kedua-dua matriks serta unsur-unsur kedua-dua matriks. Kemudian, bandingkan kedua-dua matriks. Dua matriks adalah sama jika kedua-dua elemen dan saiz matriks adalah sama. Jika matriks adalah sama dalam saiz tetapi tidak sama dalam unsur, maka matriks ditunjukkan sebagai sebanding tetapi tidak sama. Jika saiz dan elemen tidak sepadan, matriks paparan tidak boleh dibandingkan. Program berikut ialah atur cara C, digunakan untuk membandingkan sama ada dua matriks adalah sama-#include<stdio.h>#include<conio.h>main(){ intA[10][10],B[10][10] dalam

Program Python: Tukar kedudukan elemen pertama dan terakhir dalam matriks antara lajur Program Python: Tukar kedudukan elemen pertama dan terakhir dalam matriks antara lajur Sep 08, 2023 pm 04:29 PM

Matriks ialah susunan nombor dua dimensi yang disusun dalam baris dan lajur. Python tidak mempunyai sebarang jenis data untuk mewakili matriks, tetapi kita boleh menggunakan senarai bersarang atau tatasusunan NumPy sebagai matriks. Lihat senario input dan output berikut untuk melihat cara menukar elemen lajur pertama dan terakhir matriks. Senario Input-Output Katakan kita mempunyai matriks 3X3 yang diwakili menggunakan senarai senarai. Matriks keluaran akan menjadi matriks yang terhasil daripada menukar elemen lajur pertama dan terakhir. Inputmatrix:[1,3,4][4,5,6][7,8,3]Outputmatrix:[4,3,1][4,5,6][3,8,7]Mari kita pertimbangkan yang lain Matriks yang baris dan lajurnya tidak sama. Inputmatriks:

Bagaimana untuk membalikkan akaun dalam matriks? Apakah maksud penyongsangan matriks? Bagaimana untuk membalikkan akaun dalam matriks? Apakah maksud penyongsangan matriks? Mar 27, 2024 pm 12:16 PM

Dalam operasi media sosial, aliran balik akaun matriks ialah strategi biasa Dengan mengarahkan trafik antara akaun yang berbeza, peminat boleh saling melengkapi dan meningkatkan aktiviti mereka. Aliran balik antara akaun matriks memerlukan perancangan dan pelaksanaan yang teliti, dan bukan perkara yang mudah. Artikel ini akan membincangkan secara terperinci cara melaksanakan pembalikan antara akaun yang berbeza dan kepentingan penyongsangan matriks. 1. Bagaimana untuk menterbalikkan akaun dalam matriks? Antara akaun matriks, adalah penting untuk memilih akaun utama, yang akan menjadi sumber trafik utama dan platform untuk keluaran kandungan teras. Perancangan kandungan adalah untuk merumuskan rancangan kandungan yang sepadan berdasarkan ciri akaun dan khalayak sasaran untuk memastikan kualiti dan gaya kandungan yang konsisten. 3. Mengesyorkan dan menyukai satu sama lain: mempromosikan dan menyukai antara satu sama lain antara akaun matriks, dan membimbing peminat melalui susun atur dan pengaturan yang munasabah.

Analisis dan penyelesaian kepada masalah operasi titik terapung PHP Analisis dan penyelesaian kepada masalah operasi titik terapung PHP Feb 27, 2024 am 11:03 AM

PHP ialah bahasa skrip yang digunakan secara meluas dalam pembangunan laman web Fungsinya yang berkuasa dan fleksibiliti menjadikannya alat pilihan untuk banyak pembangun. Walau bagaimanapun, PHP juga mempunyai beberapa masalah apabila berurusan dengan operasi titik terapung, terutamanya apabila ia berkaitan dengan ketepatan dan ketepatan. Artikel ini akan menganalisis masalah operasi titik terapung PHP dan mencadangkan beberapa penyelesaian Ia juga akan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menyelesaikan masalah ini dengan lebih baik. Analisis Masalah Dalam PHP, nombor titik terapung ialah jenis data yang digunakan untuk mewakili perpuluhan.

See all articles