hrbust 哈理工oj 1921 三原色(改进版)【集合相关问题】
生活随笔
收集整理的這篇文章主要介紹了
hrbust 哈理工oj 1921 三原色(改进版)【集合相关问题】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| 三原色(改進版) | ||||||
| ||||||
| Description | ||||||
| Dream、Griselda?還有?Sunshine正打算裝飾一下集訓隊的墻,為了省錢,她們決定只買三原色的染料,這樣就可以花費很少的錢,得到所有的顏色了O(∩_∩)O~ 最初她們把墻分成了n塊,編號分別為1,2,3,……n。 Dream、Griselda、sunshine分別喜歡數字x,y,z,她們只涂編號為她們喜歡的數字的倍數的墻,例如:?Griselda?喜歡數字3,所以Griselda只涂編號是3,6,9,12……那些墻; 涂完之后,問這n塊墻中有多少是單色調的? | ||||||
| Input | ||||||
| 本題有多組測試數據,每組測試數據輸入四個正整數x,y,z,n其中滿足 (0<x,y,z<=1000;0<n<=10^9)。 | ||||||
| Output | ||||||
| 對于每組測試數據輸出一個數字,即單色調的墻塊總數。 | ||||||
| Sample Input | ||||||
| 1?2?3?4 6?2?4?1000 | ||||||
| Sample Output | ||||||
| 1 667 | ||||||
| Hint | ||||||
| 每個人分別有一種顏色的染料,不允許互相借用染料等。 |
這個題是讓我們計算單色的部分,我們要去掉重復的顏色的部分,剩下的就是要求的部分,這里我們很容易就知道怎樣去掉兩個顏色重疊的部分,但是兩個顏色重疊的部分的其中一部分是3色重疊,我們到底應該怎么辦呢?一個圖解決所有問題、
我們假設青,品紅和黃色就是題干中的x,y,z,那么我們先減掉兩個顏色重疊的部分的時候,一共減去了兩次黑色的部分、所以在最后我們應該加上、對應AC代碼通俗易懂:
#include<stdio.h> #include<string.h> using namespace std; #define ll long long int ll gcd(ll x,ll y) {return y==0?x:gcd(y,x%y); } ll lcm(ll x,ll y) {return x*y/gcd(x,y); } int main() {ll x,y,z,n;while(~scanf("%lld%lld%lld%lld",&x,&y,&z,&n)){ll a=lcm(x,y);ll b=lcm(x,z);ll c=lcm(y,z);ll d=lcm(a,z);ll output=n/a+n/b+n/c-2*(n/d);printf("%lld\n",n-output);} }總結
以上是生活随笔為你收集整理的hrbust 哈理工oj 1921 三原色(改进版)【集合相关问题】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laravel 5.1 php版本号,发
- 下一篇: PHP漏洞全解(二)-命令注入攻击