首頁 資料庫 mysql教程 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>
登入後複製

然后想到 (~原来)^(左边)=变化 
发现搞不成矩阵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>
登入後複製

最后要注意,如果直接矩阵乘法%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>
登入後複製


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

探索人工智慧歷史與矩陣:人工智慧教學(二) 探索人工智慧歷史與矩陣:人工智慧教學(二) Nov 20, 2023 pm 05:25 PM

在本系列的第一篇文章中,我們討論了人工智慧、機器學習、深度學習、資料科學等領域的關聯和差異。我們也為整個系列將使用的程式語言、工具等做出了一些艱難的選擇。最後,我們也介紹了一點矩陣的知識。在本文中,我們將深入討論人工智慧的核心——矩陣。不過在此之前,我們先來了解一下人工智慧的歷史我們為什麼需要了解人工智慧的歷史呢?歷史上曾出現過多次人工智慧熱潮,但在許多情況下,對人工智慧潛力的巨大期望都未能達成。了解人工智慧的歷史,有助於讓我們看清這次人工智浪潮是會創造奇蹟,抑或只是另一個即將破滅的泡沫。我們

計算矩陣右對角線元素總和的Python程序 計算矩陣右對角線元素總和的Python程序 Aug 19, 2023 am 11:29 AM

一種受歡迎的通用程式語言是Python。它被應用於各種行業,包括桌面應用程式、網頁開發和機器學習。幸運的是,Python具有簡單易懂的文法,適合初學者使用。在本文中,我們將使用Python來計算矩陣的右對角線總和。什麼是矩陣?在數學中,我們使用一個矩形排列或矩陣,用於描述一個數學物件或其屬性,它是一個包含數字、符號或表達式的矩形數組或表格,這些數字、符號或表達式按行和列排列。例如−234512367574因此,這是一個有3行4列的矩陣,表示為3*4矩陣。現在,矩陣中有兩條對角線,即主對角線和次對

如何使用Python中的numpy計算矩陣或ndArray的行列式? 如何使用Python中的numpy計算矩陣或ndArray的行列式? Aug 18, 2023 pm 11:57 PM

在本文中,我們將學習如何使用Python中的numpy函式庫計算矩陣的行列式。矩陣的行列式是一個可以以緊湊形式表示矩陣的標量值。它是線性代數中一個有用的量,並且在物理學、工程學和計算機科學等各個領域都有多種應用。在本文中,我們首先將討論行列式的定義和性質。然後我們將學習如何使用numpy計算矩陣的行列式,並透過一些實例來看它在實踐中的應用。行列式的定義與性質Thedeterminantofamatrixisascalarvaluethatcanbeusedtodescribethepropertie

Python程式使用多維數組相乘兩個矩陣 Python程式使用多維數組相乘兩個矩陣 Sep 11, 2023 pm 05:09 PM

矩陣是按行和列排列的一組數字。 m行n列的矩陣稱為mXn矩陣,m和n稱為其維度。矩陣是一個二維數組,在Python中使用列表或NumPy數組創建。一般來說,矩陣乘法可以透過將第一個矩陣的行乘以第二個矩陣的列來完成。這裡,第一矩陣的列數應等於第二矩陣的行數。輸入輸出場景假設我們有兩個矩陣A和B,這兩個矩陣的維度分別為2X3和3X2。相乘後得到的矩陣將有2行1列。 [b1,b2][a1,a2,a3]*[b3,b4]=[a1*b1+a2*b2+a3*a3][a4,a5,a6][b5,b6][a4*b2+a

C程式用於比較兩個矩陣是否相等 C程式用於比較兩個矩陣是否相等 Aug 31, 2023 pm 01:13 PM

使用者必須輸入兩個矩陣的順序以及兩個矩陣的元素。然後,比較這兩個矩陣。如果矩陣元素和大小都相等,則表示兩個矩陣相等。如果矩陣大小相等但元素相等不相等,則顯示矩陣可以比較,但不相等。如果大小和元素不匹配,則顯示矩陣無法比較。程式以下是C程序,用以比較兩個矩陣是否相等-#include<stdio.h>#include<conio.h>main(){  intA[10][10],B[10][10];  in

Python程式:交換矩陣中第一個與最後一個元素在列之間的位置 Python程式:交換矩陣中第一個與最後一個元素在列之間的位置 Sep 08, 2023 pm 04:29 PM

矩陣是由許多按行和列形式排列的數字組成的二維數組。 Python沒有任何資料類型來表示矩陣,但我們可以使用嵌套列表或NumPy數組作為矩陣。請參閱以下輸入輸出場景,以了解如何互換矩陣的第一列和最後一列元素。輸入輸出場景假設我們有一個使用列表列表表示的3X3矩陣。輸出矩陣將是交換第一列和最後一列元素的結果矩陣。 Inputmatrix:[1,3,4][4,5,6][7,8,3]Outputmatrix:[4,3,1][4,5,6][3,8,7]讓我們考慮另一個行和列不相等的矩陣。 Inputmatrix:

矩陣間的帳號如何進行倒流?矩陣倒置是什麼意思? 矩陣間的帳號如何進行倒流?矩陣倒置是什麼意思? Mar 27, 2024 pm 12:16 PM

在社群媒體運作中,矩陣帳號倒流是一種常見的策略,透過在不同帳號之間相互引導流量,實現粉絲的互相補充和活躍度的提升。矩陣帳號之間的倒流需要精心策劃和執行,不是一件簡單的事。本文將詳細探討如何在不同帳號之間實現倒流,以及矩陣倒置的意義。一、矩陣間的帳號如何進行倒流?在矩陣帳號中,選擇一個主線帳號至關重要,它將成為主要的流量來源和核心內容發佈的平台。內容規劃是根據帳號特色和目標受眾,制定相應的內容計劃,以確保內容品質和風格統一。 3.互推互贊:在矩陣帳號之間進行互推互贊,透過合理的佈局與安排,引導粉絲

Oracle資料庫運算技巧:減法操作詳解 Oracle資料庫運算技巧:減法操作詳解 Mar 02, 2024 pm 06:15 PM

Oracle資料庫作為一種強大的關聯式資料庫管理系統,提供了豐富的運算操作來滿足使用者的需求。在日常的資料庫操作中,減法操作是一個常見且重要的運算,它能夠幫助我們實現資料的減法運算,從而得到我們所需的結果。本文將詳細討論Oracle資料庫中減法操作的相關技巧,並給出具體的程式碼範例,幫助讀者更好地理解並運用這項功能。 1.減法操作的基本概念在Oracle數據

See all articles