題目大意
給出n個只有六個面的骰子
每個面由1~9 中的數字組成
每個面的數字不同
給出q次詢問
每次給出乙個串,
要求用n個骰子擺出串的形狀
題目分析
因為每個骰子只能表示乙個面
類似乙個由限制的問題
考慮網路流中的乙個點
如果它的進入的流量為1 就能限制它在與它相連的點中只選擇乙個。
那麼我們考慮建這樣乙個圖
每個數字到匯點的權值應該是查詢串中這個數字出現的次數
然後,只要我們能跑乙個滿流,問題就可以解決了
但是給出的n太大了。有5e5 ,是沒有辦法跑網路流的。
但是我們發現所有的骰子的種類數只有c(9,6)
所以,我們可以發現,對骰子進行壓縮,把相同的骰子看作乙個點,邊權是這種骰子的個數,那麼這個圖就可以縮小了
**詳解
#include using namespace std;
const int inf = 0x3f3f3f3f;
const int n = 5e5+50,m = 5e6+50;
int n,m,s,t,tot,maxflow;
int head[m],ver[m],edge[m],nxt[m],d[n];
queueq;
void add(int x,int y,int z)
bool bfs()}}
return 0;
}int dinic(int x,int flow)
} return flow-rest;
}int cnt[10];
char ch[n][7],query[m];
int idx = 0;
mapmp;
int num[5000];
int id=0;
void getcnt(char x[m])
tot = 1; s=0;t=n+20;
memset(head,0,sizeof(head));
memset(nxt,0,sizeof(nxt));
int idx = 10;
for(int j=1;j<=9;j++)
for(int j=1;j<=id;j++)
{//cout<<2注:
**已修改
牛客練習賽53 ABC
a 簡單dp include define ll long long using namespace std const ll mod 1e9 7 ll d 1000000 2 ll n intmain cout d n 1 d n 0 mod return0 b 分塊 include define...
牛客練習賽53 B, C, E 題解
b 美味果凍 更換一下列舉順序得到 容易發現 i 為 j,2j 2j,3j t 1 j,t j 時後面向下取整的結果是一樣的,分塊計算即可,j 次冪通過 j 1 次冪 o 1 得到,時間複雜度為 o nlogn include using namespace std typedef long lon...
牛客練習賽53(C題)
題目描述 有n個長度為m的文字串,每個串只含有 0 和 1 接下來有q次詢問,每次給出乙個長度為m的字串,且只含有 0 1 和 如10 1 1。下劃線可以匹配 0 或 1 即10 1 1可以匹配101111,101101,100111,100101四種串。每次詢問求出n個文字串中有多少個可以與當前詢...