problem description
v_dragon有n棧電燈泡,編號為1-n,每個燈泡都有乙個開關。那麼問題來了
1.所有燈泡初始時為不亮的
2.v_dragon分別進行三次操作
3.每次操作他都選乙個質數x,將編號為x和x的整數倍的燈泡的開關都撥動一下(如果燈為亮,那麼撥動以後燈為不亮,如果燈不亮,撥動以後變為亮)
求最後亮著的燈的數量
input
輸入t表示t組測試資料(1<=t<=100)
接下來t組測試資料
每組第一行乙個n表示燈泡個數(1<=n<=10^9)
第二行三個數a,b,c表示v_dragon每次選擇的數(1<=a,b,c<=10^6)(a,b,c全為質數且a,b,c兩兩互不相等)
output
陣列最後亮著的燈的個數
sampleinput130
2 3 5
sampleoutput
15這個題是昨天晚上在b站上看容斥演算法時給出的一道題,當時也沒想明白,事後自己想了想。這其實就是三個集合容斥的簡單變形。。題目最終要求的是求還有多少燈開著,但是如果按著原來的方法做,肯定是不行的。那樣只是求得個數,但是和燈亮的個數是不同的。
原來的方法:a+b+c-ab-ac-bc+abc。這樣的話a+b+c代表的是啊a,b,c總的要摁的燈的按鈕。而ab,bc,ac代表的是這兩個數的倍數,就是兩次摁同乙個燈。這裡我們應該想一下,如果只是減乙個的話,那麼還是和原來一樣,交接的地方還是有剩餘的。。但是對乙個燈操作兩次,燈就關了。這樣就不需要計算這一塊了。所以應該減兩次。再看+abc。我們將在前面已經-2*(ab+bc+ac)了,就相當於將abc這一塊減了三次,但是對於abc這一塊,三次操作還是亮著的。所以應該加上4*(abc)。所以最後的公式應該是a+b+c-2ab-2bc-2ac+4abc.
**如下:
#include#include#include#include#include#define ll long long
using namespace std;
ll n;
ll a,b,c;
int main()
}
第一次接觸容斥原理,挺難的,不太好理解,還需要努力呀。
努力加油a啊,(o)/~
ZJNU 1262電燈泡(三分題)
description 小明的房間布置十分簡單,只有乙個節能燈泡,非常的明亮。每天晚上,他總是在自己的房間裡來回踱步,想著如何能賺到更多的錢。有一天,他發現他在房間裡的影子長度也隨著他的步伐不斷變化。突然,他腦中閃過乙個念頭,影子的最大長度 包括地面和牆壁上的陰影 是多少呢?input 多組測試資料...
容斥原理 數論
兩個集合的容斥關係公式 a b a b a b a b 重合的部分 三個集合的容斥關係公式 a b c a b c a b b c c a a b c 最後可以推廣到n個集合,集合裡的元素為奇數則加,偶數減 hdu 4135 很簡單,直接求出所有的質因子,然後容斥解決 author crystal ...
容斥原理,反演
大概知道為什麼自己水平比較渣啦。一開始只會反演,然後被容斥驚豔到。然後寫了一段時間容斥,反演忘光光。所以融會貫通真的很難。多校的三道題,當時是用反演做的。事實上以前就知道容斥跟莫比烏斯函式值的關係,然後熟練掌握 然後一段時間沒用就忘了哈。簡單來說就是,求乙個數和乙個集合中的數互質的個數,把集合中乙個...