生活随笔
收集整理的這篇文章主要介紹了
CodeForces - 1055C Lucky Days(数论)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接:點(diǎn)擊查看
題目大意:給出兩個(gè)人的幸運(yùn)日期,問(wèn)交集最大可以是多少,兩個(gè)人幸運(yùn)日期的形式如下:
[l1,r1,t1][l_1,r_1,t_1][l1?,r1?,t1?]:[l1+kt1,r1+kt1][l_1+kt_1,r_1+kt_1][l1?+kt1?,r1?+kt1?] 是幸運(yùn)日期,其余日期為不幸運(yùn)日期[l2,r2,t2][l_2,r_2,t_2][l2?,r2?,t2?]:[l2+kt2,r2+kt2][l_2+kt_2,r_2+kt_2][l2?+kt2?,r2?+kt2?] 是幸運(yùn)日期,其余日期為不幸運(yùn)日期
題目分析:需要看出的是,通過(guò)適當(dāng)?shù)囊苿?dòng),每次都可以使得兩個(gè)幸運(yùn)日期的相對(duì)位置減少 gcd(t1,t2)gcd(t_1,t_2)gcd(t1?,t2?),所以現(xiàn)在我們只需要將其盡量對(duì)齊然后計(jì)算交集即可,分四種情況:
代碼:
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<unordered_map>
using namespace std
;
typedef long long LL
;
typedef unsigned long long ull
;
template<typename T
>
inline void read(T
&x
)
{T f
=1;x
=0;char ch
=getchar();while(0==isdigit(ch
)){if(ch
=='-')f
=-1;ch
=getchar();}while(0!=isdigit(ch
)) x
=(x
<<1)+(x
<<3)+ch
-'0',ch
=getchar();x
*=f
;
}
template<typename T
>
inline void write(T x
)
{if(x
<0){x
=~(x
-1);putchar('-');}if(x
>9)write(x
/10);putchar(x
%10+'0');
}
const int inf
=0x3f3f3f3f;
const int N
=1e6+100;
int cal(int l1
,int r1
,int l2
,int r2
,int delta
)
{l1
+=delta
,r1
+=delta
;return max(0,min(r1
,r2
)-max(l1
,l2
)+1);
}
int main()
{
#ifndef ONLINE_JUDGE
#endif
int l1
,r1
,t1
,l2
,r2
,t2
;read(l1
),read(r1
),read(t1
),read(l2
),read(r2
),read(t2
);int gcd
=__gcd(t1
,t2
);int d1
=abs(l1
-l2
)/gcd
*gcd
;int d2
=d1
+gcd
;int ans
=0;ans
=max(ans
,cal(l1
,r1
,l2
,r2
,d1
));ans
=max(ans
,cal(l1
,r1
,l2
,r2
,d2
));ans
=max(ans
,cal(l2
,r2
,l1
,r1
,d1
));ans
=max(ans
,cal(l2
,r2
,l1
,r1
,d2
));write(ans
);return 0;
}
總結(jié)
以上是生活随笔為你收集整理的CodeForces - 1055C Lucky Days(数论)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。