国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

[校內(nèi)互測(cè)]Rivendell’s pearls(hash+容斥原理)

2019-11-06 06:19:31
字體:
供稿:網(wǎng)友

=== ===

這里寫圖片描述 這里寫圖片描述

=== ===

題解

沒錯(cuò)這本來應(yīng)該是ATP胡策第一次A題但是然而but被卡了hash然后就變成了暴力分。。這里貼的這個(gè)破代碼就是考試的時(shí)候?qū)懙摹!P姨澠瓷狭吮┝Σ蝗籘MD肯定一分也沒有。。最后改了cloverhxy的萬能質(zhì)數(shù)就過了。。

hash的思路還是比較顯然的,因?yàn)槲粩?shù)非常的少,所以可以暴力選擇某些位讓它們作為不相同的位,然后把這幾位在原串里面去掉,搞一坨hash值出來排個(gè)序就能知道到底幾對(duì)數(shù)字相等了。一開始覺得這么做就可以了但是發(fā)現(xiàn)算的亂七八糟答案多了好多。。這是為什么呢。。

原因就是它選出來的那幾位不一定全都是不相等的,因?yàn)槲覀冎皇恰凹傺b”那幾位在每一對(duì)串里面都不一樣然后強(qiáng)行把它摳出來,但是有可能選出來的某些位在某幾對(duì)串里面是相等的。也就是說題目中要求的是恰好k位不同,而我們算的是至多k位不同,所以說還得減去那些不同的位數(shù)比k少的。

然后這就是一個(gè)容斥的思路了。考慮有什么東西被多選了,每個(gè)被多選了幾次。以某一對(duì)串里面選定了2個(gè)字符讓它們相等為例,如果這兩個(gè)串是“aabc”和“aade”這種東西,也就是恰好有2個(gè)字符相等,那么肯定能正確的判定出來;但是如果是“aaab”和“aaac”這種有3個(gè)字符相等的東西,那么這三個(gè)相等的a我們?nèi)我饬粝聝蓚€(gè),都會(huì)判定它們相等。也就是說這一對(duì)不合法的串被多計(jì)算了C23次。

但是可以發(fā)現(xiàn)如果僅僅選出所有3個(gè)字符相等的串然后乘上C23再減去答案還是不對(duì)的,這是因?yàn)槿绻@個(gè)串有4個(gè)字符相等,它們也會(huì)被重復(fù)計(jì)算然后多減去。首先在算2個(gè)字符相等的時(shí)候它們被多算了C24次,然后在減去3個(gè)字符相等的時(shí)候它們每一個(gè)被重復(fù)計(jì)算了C34次,每一次乘上一個(gè)C23。可以發(fā)現(xiàn)它們被多減去了C24次。要把這些都加回來。剩下的情況以此類推,在dfs的時(shí)候控制一下容斥系數(shù)就可以了。

代碼

請(qǐng)自行忽略奇怪的函數(shù)名和強(qiáng)行拼進(jìn)去的暴力。。。。

#include<cstdio>#include<cstring>#include<algorithm>#define ULL unsigned long longusing namespace std;const ULL Mn=2000001001;int n,k,C[10][10];ULL poww[10],hash[50010],ans,num[50010];char c[50010][6];bool chs[10];int comp(char *p,char *q){ int tot=0; for (int i=0;i<4;i++) if (p[i]!=q[i]) ++tot; return tot;}void qwert(){ int ans=0; for (int i=1;i<n;i++) for (int j=i+1;j<=n;j++) if (comp(c[i],c[j])==k) ++ans; 偏偏在最后出現(xiàn)的補(bǔ)充說明

容斥好難啊。。 完全想不過來啊。。 那些亂七八糟的系數(shù)好難算啊。。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 出国| 苗栗县| 正宁县| 嘉鱼县| 托克逊县| 凤翔县| 高唐县| 涞源县| 淳化县| 南宁市| 枣阳市| 静安区| 东海县| 丹凤县| 安福县| 军事| 肇东市| 元阳县| 辉南县| 临海市| 迁西县| 科技| 米林县| 道孚县| 南康市| 夏邑县| 普陀区| 道孚县| 都江堰市| 木兰县| 湛江市| 伽师县| 太康县| 腾冲县| 屯留县| 满城县| 荔浦县| 柳江县| 区。| 莱阳市| 珲春市|