日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

彩灯(洛谷-P3857)

發(fā)布時(shí)間:2025/3/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 彩灯(洛谷-P3857) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

Peter女朋友的生日快到了,他親自設(shè)計(jì)了一組彩燈,想給女朋友一個(gè)驚喜。已知一組彩燈是由一排N個(gè)獨(dú)立的燈泡構(gòu)成的,并且有M個(gè)開關(guān)控制它們。從數(shù)學(xué)的角度看,這一排彩燈的任何一個(gè)彩燈只有亮與不亮兩個(gè)狀態(tài),所以共有2N個(gè)樣式。由于技術(shù)上的問題,Peter設(shè)計(jì)的每個(gè)開關(guān)控制的彩燈沒有什么規(guī)律,當(dāng)一個(gè)開關(guān)被按下的時(shí)候,它會(huì)把所有它控制的彩燈改變狀態(tài)(即亮變成不亮,不亮變成亮)。假如告訴你他設(shè)計(jì)的每個(gè)開關(guān)所控制的彩燈范圍,你能否幫他計(jì)算出這些彩燈有多少種樣式可以展示給他的女朋友?

注: 開始時(shí)所有彩燈都是不亮的狀態(tài)。

輸入輸出格式

輸入格式:

每組測試數(shù)據(jù)第一行為兩個(gè)整數(shù)N和M,用空格隔開。緊接著是有M行,每行都是一個(gè)長度為N的字符串,表示一個(gè)開關(guān)控制彩燈的范圍(N盞燈),如果第i個(gè)字母是大寫字母’O’,則表示這個(gè)開關(guān)控制第i盞燈,如果第i個(gè)字母是大寫字母’X’,則表示這個(gè)開關(guān)不控制此燈。

輸出格式:

輸出這些開關(guān)和彩燈可以變換出來的樣式數(shù)目。由于這個(gè)值可能會(huì)很大,請求出它對(duì)于整數(shù)2008的余數(shù)。

輸入輸出樣例

輸入樣例#1:

2 3
OO
XO
OX

輸出樣例#1:

4

說明/提示

可見樣例中第一個(gè)開關(guān)控制了所有的彩燈,而后兩個(gè)開關(guān)分別控制了第一個(gè)和第二個(gè)彩燈,這樣我們可以只用后兩個(gè)開關(guān)控制彩燈,可以變換出來所有的2*2個(gè)狀態(tài)。

30%的數(shù)據(jù)中,N和M不超過15。

另外有40%的數(shù)據(jù)中,N和M有一個(gè)為50

100%的數(shù)據(jù)中,N和M不超過50。

思路:

對(duì)于每個(gè)開關(guān),可以看成一個(gè) 01 串,初始是一個(gè)全部為 0 的串,要求經(jīng)過這些開關(guān)的操作后,出現(xiàn)的不同的 01 串的個(gè)數(shù)

由于異或具有相消性,開關(guān)符合異或的特性,考慮到最終要求不同的串的個(gè)數(shù),可利用線性基來解決

在線性基中,其中的元素是不重復(fù)的,因此可以將這些 01 串轉(zhuǎn)為 10 進(jìn)制后存入線性基,然后統(tǒng)計(jì)線性基中元素的個(gè)數(shù) res

線性基中的元素均是由外界元素異或出來的,因此,對(duì)于線性基中的每個(gè)元素,都有選、不選兩種情況,故而最終答案為 (1<<res)%2008

源代碼

#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #include<bitset> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long #define Pair pair<int,int> const int MOD = 2008; const int N = 1000+5; const int dx[] = {0,0,-1,1,-1,-1,1,1}; const int dy[] = {-1,1,0,0,-1,1,-1,1}; using namespace std;LL res; struct LinearBasis {LL d[60+5];//線性基LinearBasis() {memset(d,0,sizeof(d));}bool add(LL x){for(int i=60; i>=0; i--){if(x&(1LL<<i)) {if(d[i])//插入失敗,異或x^=d[i];else {//插入成功,保存后退出res++;//記錄插入成功的個(gè)數(shù)d[i]=x;break;}}}return x>0;//x>0插入成功} }lb; int main(){int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){char str[100];scanf("%s",str);LL x=0;for(int i=0;i<strlen(str);i++)//將字符串轉(zhuǎn)成數(shù)if(str[i]=='O')x+=(1LL<<(n-i));lb.add(x);//加入線性基}printf("%lld\n",(1LL<<res)%2008);return 0; }

總結(jié)

以上是生活随笔為你收集整理的彩灯(洛谷-P3857)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。