亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

HNOI2012 雙十字 DP+樹狀數組優化

2019-11-11 04:09:55
字體:
來源:轉載
供稿:網友

題目鏈接:bzoj點我:-) 洛谷點我:-) 題目描述: 在C 部落,雙十字是非常重要的一個部落標志。所謂雙十字,由兩條水平的和一條豎直的”1“線段組成,要求滿足以下幾個限制: ·兩條水平的線段不能在相鄰的兩行。 ·豎直線段上端必須嚴格高于兩條水平線段,下端必須嚴格低于兩條水平線段。 ·豎直線段必須將兩條水平線段嚴格劃分成相等的兩半。 ·上方的水平線段必須嚴格短于下方的水平線段。 現在給定一個 R*C的01 矩陣,要求計算出這個 01 矩陣中有多少個雙十字。注意最終的結果可能很大,只要求輸出雙十字的個數 mod 1,000,000,009 的值

輸入格式: 第一行為用空格隔開的兩個正整數 R和C,分別表示01矩陣的行數和列數。輸入文件第二行是一個非負整數N,表示01矩陣中”0“的個數。接下來的N行,每行為用空格隔開的兩個正整數x和y(1<=x<=R,1<=y<=C),表示(x,y)是一個”0“。數據保證N個”0“的坐標兩兩不同。數據保證R,C,N<=10,000,R*C<=1,000,000.(事實上R*C可能稍大于原設定)

輸出格式: D mod 1,000,000,009 的結果,其中D 為要求的 01矩陣中雙十字的個數。

思路: 首先因為R與C不確定,所以我們需要將點們放在一個一維數組中,算算編號就好了 接下來記錄lr[i]down[i]分別表示點i最多可以向左右延伸和向下延伸多少個1(不包括自己)

然后我們枚舉雙十字的下面那個交點,推一推公式:

{注:len是下面橫線的長度,top表示能到達的最上的位置(連續的1),j是上面的橫線的中心位置} 對于一個點i,它對答案的貢獻是: ∑lr[i]len=1min(lr[j],len?1)×down[i]×(j?top) 顯然這個min非常惡心,我們考慮把它拆開成下面的樣子: 1.當(lr[j] <= len-1) 貢獻是∑lr[i]len=1lr[j]×down[i]×(j?top) 2.當(lr[j] > len-1) 貢獻是∑lr[i]len=1(len?1)×down[i]×(j?top)

再進一步變形: 1.當(lr[j] <= lr[i]) 貢獻是(lr[i]×lr[j]?lr[j]×(lr[j]+1)/2)×down[i]×(j?top) 2.當(lr[j] > lr[i]) 貢獻是lr[i]×(lr[i]?1)/2×down[i]×(j?top) (對于1的解釋: lr[i]×lr[j]是總方案數,lr[j]×(lr[j]+1)/2是不合法方案數)

現在,需要解決的是所有帶j的式子,我們定義3個樹狀數組t1, t2, t3,分別記錄: 1.?lr[j]?(lr[j]+1)/2)×(j?top) 2.lr[j]×(j?top) 3.(j?top) 把lr[i]作為位置插入,先枚舉列再枚舉行,每次注意清空。 并且因為兩根橫線不能挨在一起,所以枚舉點(i, j)插入(i-1, j)的值

感想: 啊我是湖南的為什么這么難qwq 這題我初一的時候抄了一遍題解,然后高一又抄了一遍題解。。 比較懷疑小時候到底看懂了沒。。 其實也不是特別難吧,還是可以想一想推一推的 下方程序中的top與解釋有一點點不一樣,是解釋的top-1

代碼

//miaomiao 2017.2.7#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;#define LL long long#define Set(a, v) memset(a, v, sizeof(a))#define For(i, a, b) for(int i = (a); i <= (int)(b); i++)#define Forr(i, a, b) for(int i = (a); i >= (int)(b); i--)#define N (10000+5)#define NM (1200000+5)const LL MOD = 1e9+9;int n, m, lr[NM], L[NM], R[NM], down[NM];bool is0[NM];struct Tbit{ LL c[N]; void clear(){Set(c, 0);} int lowbit(int x){return x&(-x);} void add(int x, LL v){ while(x < N){c[x] = (c[x]+v)%MOD; x += lowbit(x);} } LL query(int x){ LL ret = 0; while(x > 0){ret = (ret+c[x])%MOD; x -= lowbit(x);} return ret; }}t1, t2, t3;int ID(int x, int y){return m*(x-1)+y;}inline void init(){ For(i, 1, n){ L[ID(i,1)] = !is0[ID(i,1)]; R[ID(i,m)] = !is0[ID(i,m)]; For(j, 2, m) if(!is0[ID(i,j)]) L[ID(i,j)] = L[ID(i,j-1)]+1; Forr(j, m-1, 1) if(!is0[ID(i,j)]) R[ID(i,j)] = R[ID(i,j+1)]+1; For(j, 1, m) if(!is0[ID(i,j)]) lr[ID(i,j)] = min(L[ID(i,j)], R[ID(i,j)])-1; } For(i, 1, m){ down[ID(n,i)] = !is0[ID(n,i)]; Forr(j, n-1, 1) if(!is0[ID(j,i)]) down[ID(j,i)] = down[ID(j+1,i)]+1; Forr(j, n, 1) if(down[ID(j,i)]) down[ID(j,i)]--; }}inline void work(){ int top, now; LL ans = 0; For(j, 1, m){ top = 0; t1.clear(); t2.clear(); t3.clear(); For(i, 1, n){ if(is0[ID(i,j)]){top=i; t1.clear(); t2.clear(); t3.clear(); continue;} now = ID(i,j); ans += t1.query(lr[now])*down[now]%MOD; ans += t2.query(lr[now])*down[now]*lr[now]%MOD; ans += (t3.query(m)-t3.query(lr[now]))*lr[now]*(lr[now]-1)/2*down[now]%MOD; ans %= MOD; if(i==1) continue; now = ID(i-1,j); if(lr[now]){ t1.add(lr[now], -lr[now]*(lr[now]+1)/2%MOD*(i-1-top-1)%MOD); t2.add(lr[now], lr[now]*(i-1-top-1)%MOD); t3.add(lr[now], i-1-top-1); } } }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品网站| 国产精品美女免费看| 国产精品极品美女粉嫩高清在线| 国产亚洲福利一区| www.亚洲人.com| 91高清视频免费| 日本精品久久中文字幕佐佐木| 欧美精品国产精品日韩精品| 久操成人在线视频| 精品一区二区电影| 日韩国产激情在线| 久久综合免费视频| 国产精品三级美女白浆呻吟| 欧美性xxxx| 久久精品美女视频网站| 视频在线观看一区二区| 欧美日韩高清区| 中文字幕免费精品一区| 91久久精品日日躁夜夜躁国产| 亚洲国产精品福利| 日韩中文第一页| 色偷偷综合社区| 亚洲精品美女久久久| 亚洲欧美日韩一区二区在线| 日韩中文娱乐网| 欧美国产日韩中文字幕在线| 91中文字幕一区| 欧美精品激情blacked18| 热久久这里只有精品| 91丨九色丨国产在线| 欧美www在线| 少妇精69xxtheporn| 国产ts一区二区| 538国产精品一区二区免费视频| 欧美午夜激情在线| 98视频在线噜噜噜国产| 综合国产在线观看| 精品伊人久久97| 奇米4444一区二区三区| 亚洲iv一区二区三区| 久久艳片www.17c.com| 欧美性xxxxx极品娇小| 久久97久久97精品免视看| 北条麻妃一区二区三区中文字幕| 亚洲欧洲自拍偷拍| 欧美香蕉大胸在线视频观看| 成人女保姆的销魂服务| 亚洲国产精品视频在线观看| 久久99青青精品免费观看| 国产激情综合五月久久| 97香蕉超级碰碰久久免费软件| 欧美视频在线看| 91精品国产免费久久久久久| 欧美电影在线观看网站| 久久99青青精品免费观看| 狠狠躁18三区二区一区| 国产精品美女久久久免费| 国内精品久久久久伊人av| 国产精品美女免费看| 国产精品久久一区主播| 亚洲新声在线观看| 成人av在线天堂| 一区二区av在线| 日韩美女毛茸茸| 免费99精品国产自在在线| 国内免费精品永久在线视频| 欧美一区二区视频97| 国产一区二区三区久久精品| 国模精品一区二区三区色天香| 91在线观看免费高清完整版在线观看| 日韩电影网在线| 亚洲国产天堂久久综合网| 精品国产一区二区三区久久久狼| 国内偷自视频区视频综合| 亚洲国产成人久久综合一区| 综合激情国产一区| 色爱av美腿丝袜综合粉嫩av| 青青久久av北条麻妃海外网| 97国产成人精品视频| 欧美国产日韩视频| 日本欧美国产在线| www.欧美精品一二三区| 亚洲二区中文字幕| 欧美日韩国产中文精品字幕自在自线| 欧美电影《睫毛膏》| 亚洲天堂男人天堂女人天堂| 欧美成年人视频网站欧美| 欧美激情精品久久久久久久变态| 日本午夜在线亚洲.国产| 在线观看日韩视频| 久久精品影视伊人网| 欧洲精品久久久| 欧美精品生活片| 日韩美女毛茸茸| 日韩欧美亚洲成人| 黑人巨大精品欧美一区免费视频| 欧美一级大片视频| 亚洲成年人在线播放| 91国产精品视频在线| 国产精品久久一区主播| 亚洲国产精品系列| 中文字幕亚洲专区| 91精品国产91久久久久久最新| 国产剧情日韩欧美| 日本一本a高清免费不卡| 久久视频精品在线| 欧美激情综合色综合啪啪五月| 亚洲激情免费观看| 国产精品草莓在线免费观看| 日韩欧美在线视频免费观看| 精品福利在线视频| 最近2019免费中文字幕视频三| 日韩欧美精品中文字幕| 亚洲国产精品成人精品| 美女啪啪无遮挡免费久久网站| 日韩精品在线观看一区二区| 日韩风俗一区 二区| 综合网日日天干夜夜久久| 精品视频9999| 午夜精品美女自拍福到在线| 国产伦精品一区二区三区精品视频| 国产午夜精品理论片a级探花| 国产精品高清免费在线观看| 91精品久久久久久久久| 国产999精品| 日韩美女在线观看一区| 亚洲春色另类小说| 另类图片亚洲另类| 国产精品老女人精品视频| 亚洲欧洲xxxx| 97人洗澡人人免费公开视频碰碰碰| 亲子乱一区二区三区电影| 亚洲国产精品人久久电影| 亚洲人成电影在线观看天堂色| 中文字幕亚洲一区二区三区五十路| 亚洲娇小xxxx欧美娇小| 亚洲高清久久久久久| 91久久国产精品| 日韩欧美国产激情| 国产大片精品免费永久看nba| 日韩在线观看免费| 91国内产香蕉| 中文字幕日本精品| 久久久久久有精品国产| 操人视频在线观看欧美| 久久亚洲欧美日韩精品专区| 国产成人在线播放| 国产精品成人久久久久| 成人黄色免费在线观看| 在线成人激情视频| 亚洲2020天天堂在线观看| 亚洲欧美在线x视频| 久久精品国产综合| 97视频在线观看播放| 日韩欧美国产骚| 国产精品视频永久免费播放| 亚洲欧美在线播放| 久久久久久久国产精品视频| 亚洲国产日韩一区| 色偷偷88888欧美精品久久久| 日韩小视频在线观看| 欧美激情亚洲另类| 日韩精品免费在线| 国产在线观看91精品一区|