BZOJ 1898: [Zjoi2005]Swamp 沼澤鱷魚 [矩陣乘法]

1898: [Zjoi2005]Swamp 沼澤鱷魚

Time Limit:?5 Sec??Memory Limit:?64 MB
Submit:?1082??Solved:?602
[Submit][Status][Discuss]

Description

潘塔納爾沼澤地號稱世界上最大的一塊濕地,它地位于巴西中部馬托格羅索州的南部地區。每當雨季來臨,這里碧波蕩漾、生機盎然,引來不少游客。為了讓游玩更有情趣,人們在池塘的中央建設了幾座石墩和石橋,每座石橋連接著兩座石墩,且每兩座石墩之間至多只有一座石橋。這個景點造好之后一直沒敢對外開放,原因是池塘里有不少危險的食人魚。豆豆先生酷愛冒險,他一聽說這個消息,立馬趕到了池塘,想做第一個在橋上旅游的人。雖說豆豆愛冒險,但也不敢拿自己的性命開玩笑,于是他開始了仔細的實地勘察,并得到了一些驚人的結論:食人魚的行進路線有周期性,這個周期只可能是2,3或者4個單位時間。每個單位時間里,食人魚可以從一個石墩游到另一個石墩。每到一個石墩,如果上面有人它就會實施攻擊,否則繼續它的周期運動。如果沒有到石墩,它是不會攻擊人的。借助先進的儀器,豆豆很快就摸清了所有食人魚的運動規律,他要開始設計自己的行動路線了。每個單位時間里,他只可以沿著石橋從一個石墩走到另一個石墩,而不可以停在某座石墩上不動,因為站著不動還會有其它危險。如果豆豆和某條食人魚在同一時刻到達了某座石墩,就會遭到食人魚的襲擊,他當然不希望發生這樣的事情。現在豆豆已經選好了兩座石墩Start和End,他想從Start出發,經過K個單位時間后恰好站在石墩End上。假設石墩可以重復經過(包括Start和End),他想請你幫忙算算,這樣的路線共有多少種(當然不能遭到食人魚的攻擊)。

Input

輸入文件共M + 2 + NFish行。第一行包含五個正整數N,M,Start,End和K,分別表示石墩數目、石橋數目、Start石墩和End石墩的編號和一條路線所需的單位時間。石墩用0到N–1的整數編號。第2到M + 1行,給出石橋的相關信息。每行兩個整數x和y,0 ≤ x, y ≤ N–1,表示這座石橋連接著編號為x和y的兩座石墩。第M + 2行是一個整數NFish,表示食人魚的數目。第M + 3到M + 2 + NFish行,每行給出一條食人魚的相關信息。每行的第一個整數是T,T = 2,3或4,表示食人魚的運動周期。接下來有T個數,表示一個周期內食人魚的行進路線。? 如果T=2,接下來有2個數P0和P1,食人魚從P0到P1,從P1到P0,……;? 如果T=3,接下來有3個數P0,P1和P2,食人魚從P0到P1,從P1到P2,從P2到P0,……;? 如果T=4,接下來有4個數P0,P1,P2和P3,食人魚從P0到P1,從P1到P2,從P2到P3,從P3到P0,……。豆豆出發的時候所有食人魚都在自己路線上的P0位置,請放心,這個位置不會是Start石墩。

Output

輸出路線的種數,因為這個數可能很大,你只要輸出該數除以10000的余數就行了。 【約定】? 1 ≤ N ≤ 50 ? 1 ≤ K ≤ 2,000,000,000 ? 1 ≤ NFish ≤ 20

Sample Input

6 8 1 5 3
0 2
2 1
1 0
0 5
5 1
1 4
4 3
3 5
1
3 0 5 1

Sample Output

2

【樣例說明】
時刻 0 1 2 3
食人魚位置 0 5 1 0
路線一 1 2 0 5
路線二 1 4 3 5

元旦集訓講課時想出來了 bingo
沒有食人魚不是裸題嗎,用一個向量表示從s到1..N的距離,然后不停乘鄰接矩陣行了,當然快速冪
有食人魚,發現食人魚最多十二個鄰接矩陣一循環,處理出12個作為1個然后快速冪行了
怎么處理呢?
假設食人魚在j時刻到達x這個點,那么j時刻的鄰接矩陣x這一列全是0,因為他要求下一個矩陣的貢獻上不能有x這一列貢獻的
注意:
一開始s和t忘+1了....然后...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=52,MOD=1e4;
typedef long long ll;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
int n,m,s,t,k,x,y,fish,f[15];
struct Mat{int a[N][N];Mat(){memset(a,0,sizeof(a));}void ini(){for(int i=1;i<=n;i++) a[i][i]=1;}
}g[15],ans;
inline Mat operator *(Mat A,Mat B){Mat C;for(int k=1;k<=n;k++)for(int i=1;i<=n;i++) if(A.a[i][k])for(int j=1;j<=n;j++) if(B.a[k][j])C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%MOD;return C;
}
inline Mat operator ^(Mat A,int k){Mat ans;ans.ini();for(;k;k>>=1,A=A*A)if(k&1) ans=ans*A;return ans;
}
void print(Mat A){puts("hiMat");for(int i=1;i<=n;i++){for(int j=1;j<=n;j++) printf("%d ",A.a[i][j]);puts("");}
}
int main(){//freopen("in.txt","r",stdin);n=read();m=read();s=read()+1;t=read()+1;k=read();for(int i=1;i<=m;i++){x=read()+1;y=read()+1;for(int j=1;j<=12;j++) g[j].a[x][y]=g[j].a[y][x]=1;}fish=read();for(int i=1;i<=fish;i++){int T=read();for(int j=1;j<=T;j++) f[j]=read()+1;for(int j=1;j<=12;j++)for(int k=1;k<=n;k++) g[j].a[k][f[j%T+1]]=0;}g[0].ini();for(int i=1;i<=12;i++) g[0]=g[0]*g[i];ans=g[0]^(k/12);for (int i=1;i<=k%12;i++) ans=ans*g[i];printf("%d",ans.a[s][t]);
}

?

轉載于:https://www.cnblogs.com/candy99/p/6261396.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373134.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373134.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373134.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從Spring開始,Java EE 6必須具備哪些附加功能?

我是一名高級Java開發人員&#xff0c;必須研究應用程序架構師選擇的技術。 我最多只能表達對特定技術的看法&#xff0c;不能做出/影響技術選擇的決定。 因此&#xff0c;在我的正式項目中&#xff0c;我別無選擇從Spring遷移到JavaEE6或從JavaEE6遷移到Spring。 我堅信&#…

UML類圖與類的關系詳解

在畫類圖的時候&#xff0c;理清類和類之間的關系是重點。類的關系有泛化(Generalization)、實現&#xff08;Realization&#xff09;、依賴(Dependency)和關聯(Association)。其中關聯又分為一般關聯關系和聚合關系(Aggregation)&#xff0c;合成關系(Composition)。下面我們…

教程:Hibernate,JPA和Spring MVC –第2部分

本教程將向您展示如何使用基本的Hibernate / JPA應用程序&#xff0c;如何將其轉換為Spring MVC Web項目&#xff0c;以便能夠在Web瀏覽器中查看數據庫&#xff0c;以及最后使用Spring的Transactional注釋來減少樣板代碼。 本教程假定您熟悉Java和Maven&#xff0c;并且已經完成…

算法轉換c語言程序,(轉)C語言實現卡爾曼濾波算法程序

非常感謝原作者&#xff0c;我在這個的基礎上轉換成純整形運算。STM32F103 12位ADC先放大1000倍再運算&#xff0c;理論上可以保留小數點后三位的結果。效果非常不錯&#xff0c;運算速度也快&#xff0c;72M時鐘 1-2uS左右(根據MDK周期數)。]uint32_t KalmanFilter(int32_t Re…

Java 8的烹調方式–拼圖項目

什么是Project Jigsaw&#xff1a;Project Jigsaw是使Java編譯器模塊知道的項目。 多年以來&#xff0c;Java API一直是整體的&#xff0c;即從代碼的任何部分都可以平等地看到整個API。 還沒有任何方法可以聲明代碼對任何其他用戶庫的依賴關系。 拼圖項目試圖以非常有效的方式…

python之路-SQLAlchemy

SQLAchemy SQLAlchemy是Python編程語言下的一款ORM框架&#xff0c;該框架建立在數據庫API之上&#xff0c;使用關系對象映射進行數據庫操作&#xff0c;簡言之便是&#xff1a;將對象轉換成SQL&#xff0c;然后使用數據API執行SQL并獲取執行結果。 安裝&#xff1a; pip3 inst…

POJ 1751 Highways

題意&#xff1a;n個城市&#xff0c;然后把n個城市的坐標都給你&#xff0c;然后給你m條已經修好的道路&#xff0c;然后給出m個已經修好道路的城市a&#xff0c;b&#xff0c; However, they want to guarantee that every town is highway-reachable from every other town.…

C語言編程中void什么意思,程序設計中遇到的void到底是什么意思

部分編程的初學者都會問"void是什么意思","為什么很多函數前都要加個void".實際上,void最簡單的解釋就是把0轉換成空類型的意思。下面用各個開發語言來詳解void1.C語言中的void表示空類型&#xff0c;它跟int&#xff0c;float是同地位的&#xff0c;一般用…

Linux中vim編輯器的縮進的功能鍵

vim編程時,經常需要對代碼進行縮進處理,以增加程序的可讀性和后期的代碼維護. 可以采用多種方式達到縮進的目的: 1) 命令模式(command mode) 2) Visual模式&#xff08;visual mode&#xff09; 2) 輸入模式(entry mode) 3) 末行模式(last-line mode) 4) 在/etc/vimrc有給予vim…

JSF 2,PrimeFaces 3,Spring 3和Hibernate 4集成項目

本文展示了如何集成JSF2&#xff0c;PrimeFaces3&#xff0c;Spring3和Hibernate4技術。 它為Java開發人員提供了一個通用的項目模板。 另外&#xff0c;如果Spring不用于業務和數據訪問層&#xff0c;則可以提供JSF – PrimeFaces和Hibernate集成項目。 二手技術&#xff1a…

c語言編程文件中刪除數據結構,C語言數據結構實戰(一)順序表的插入與刪除

今天學習了思成老師的數據結構實戰教程 寫了一個順序表 插入和刪除的操作 把源碼共享給大家 一共包括list.c stu.h main.c list.h .h文件是頭文件 需要引入 具體的功能我都已經在代碼中寫明了list.h代碼如下&#xff1a;//線性表的定義在頭文件中實現#ifndef _LIST_H#define …

內存使用分析工具Valgrind簡單用法

轉載自 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html 暫時還未使用過&#xff0c;記錄下&#xff0c;記錄下&#xff0c;記錄下 Valgrind的主要作者Julian Seward剛獲得了今年的Google-OReilly開源大獎之一──Best Tool Maker。讓我們一起來看一下他的作品…

Lucene概述第一部分:創建索引

介紹 我最近一直在與開源搜索引擎Lucene合作 。 我不是專家&#xff0c;但是由于我只是瀏覽了一些相當稀疏的文檔并將應用程序從Lucene的很舊的版本遷移到了最新版本的2.4&#xff0c;所以我在總體上很清楚。 Lucene的文檔有點讓人難以想象&#xff0c;因此我想趁此機會在我腦海…

初識openstack

一、 什么是openstack&#xff1f; OpenStack是一個由NASA&#xff08;美國國家航空航天局&#xff09;和Rackspace合作研發并發起的&#xff0c;以Apache許可證授權的自由軟件和開放源代碼項目。 二、openstack前世今身 openstack是一個跟Eucalyptus,AWS(Amazon web Service)類…

c語言case多語句的取值,Switch Case語句中多個值匹配同一個代碼塊的寫法

C&num;&plus;JQuery&plus;&period;Ashx&plus;百度Echarts實現全國省市地圖和餅狀圖動態數據圖形報表的統計在目前的一個項目中,需要用到報表表現數據,這些數據有多個維度,需要同時表現出來,同時可能會有大量數據呈現的需求,經過幾輪挑選,最終選擇了百度的e…

php解決下單、抽獎并發導致的庫存負數的問題

我們知道數據庫處理sql是一條條處理的&#xff0c;假設購買商品的流程是這樣的&#xff1a; sql1:查詢商品庫存 if(庫存數量 > 0) { //生成訂單... sql2:庫存-1 } 當沒有并發時&#xff0c;上面的流程看起來是如此完美&#xff0c;假設同時兩個人下單&#xff0c;而…

在Spring中使用JDBCJobStore配置Quartz

我將開始一些有關Quartz Scheduler內部&#xff0c;提示和技巧的系列文章&#xff0c;這是第0章-如何配置持久性作業存儲。 在Quartz中&#xff0c;您基本上可以在將作業和觸發器存儲在內存中以及在關系數據庫中進行選擇&#xff08; Terracotta是最近添加的混合功能&#xff0…

rlwrap插件,實現sqlplus上下翻頁

oracle在Linux下&#xff0c;sqlplus中不能上下翻&#xff0c;最主要我經常打錯字&#xff01;嘿嘿 01、下載 RPM &#xff1a;http://rpmfind.net/linux/rpm2html/search.php?queryrlwrap tar.gz:https://fossies.org/linux/privat/rlwrap-0.42.tar.gz/ 百度云&#xff1a;h…

ice庫c語言例子,很不多的ICE架構入門學習例子

雖然使用傳統的SOCKET編程&#xff0c;我們可以更為清楚程序的性能&#xff0c;能夠更直接的操控SOCKET的設置&#xff0c;比如發送超時時間&#xff0c;接受BUFFER的大小&#xff0c;以及進行自己的協議加密。但是由于其調試成本較高&#xff0c;且不易于分布式部署ICE 作為一…

程序員的十個層次,你屬于哪一層?(轉)

自西方文藝復興以來&#xff0c;中國在自然科學方面落后西方很多&#xff0c;軟件領域也不例外。當然現在中國的許多程序員們對此可能有許多不同的意見&#xff0c;有些人認為中國的程序員水平遠落后于西方&#xff0c;有些則認為中國的程序員個人能力并不比西方的程序員差&…