bzoj1853: [Scoi2010]幸運數字(容斥原理)
題目傳送門
這道題。。
資料有點強啊。。。。
解法:
我好垃圾我一開始的想法如下:
先把幸運數字都求出來。。
然後用容斥原理去搜。。
奇數個的時候就加上答案,偶數個的時候就減去答案。
結果。。
資料規模十的十次方。
那麼有兩千個幸運數字誒。
容斥原理2的兩千次方。
T到死。。。。。
想了很久,從大到小會不會常數稍微小一點呢。。
(以前做過那種爆搜填木桶的題,從大到小可以AC從小到大要T)
然後打了個程式碼。
T了。
T了很多次。。
找不出原因啊上網%題解呀。。。。
發現還有這種操作?!
dfs裡面求最小公倍數會炸。。。
要把它轉成double型別然後再判斷?!
不懂,求神犇指教。
程式碼實現:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
ll st,ed;int len1,len2;
ll a[11000],b[11000];
ll s[11000];int len;
void dfs2(ll x) {if(x>ed)return ;if(x!=0)a[++len1]=x;dfs2(x*10+6);dfs2(x*10+8);}
bool cmp(ll n1,ll n2) {return n1<n2;}
bool cmp1(ll n1,ll n2) {return n1>n2;}
ll get_sum(ll x) {return ed/x-(st-1)/x;}
ll gcd(ll x,ll y) {if(x==0)return y;return gcd(y%x,x);}
ll lcu(ll x,ll y) {if(x>y)swap(x,y);return x/gcd(x,y)*y;}
ll ans=0;bool v[11000];
void dfs(ll Gcd,int x,int k) {
if(x==len+1) {
if(k==0)return ;
if(k%2==1) ans+=get_sum(Gcd);
else ans-=get_sum(Gcd);
return ;
}
dfs(Gcd,x+1,k);
ll t=Gcd/gcd(Gcd,s[x]);
if((double)t*s[x]<=ed)dfs(lcu(s[x],Gcd),x+1,k+1);
}
int main() {
scanf("%lld%lld",&st,&ed);
len1=0;dfs2(0);
sort(a+1,a+1+len1,cmp);
memset(v,true,sizeof(v));
for(int i=1;i<=len1;i++)if(v[i]==true)for(int j=i+1;j<=len1;j++)if(a[j]%a[i]==0)v[j]=false; //如果大的包含小的那我們肯定保留小的呀,因為小的遲早會覆蓋到大的。
len=0;for(int i=1;i<=len1;i++)if(v[i]==true)s[++len]=a[i];
sort(s+1,s+1+len,cmp1);
ans=0;dfs(1,1,0);printf("%lld\n",ans);
return 0;
}
相關文章
- 容斥原理——數學知識
- #19. 計數(容斥原理)
- 容斥原理
- 【模板】容斥原理
- 容斥原理講解
- 遊戲裡面的容斥原理遊戲
- bzoj 2655: calc [容斥原理 伯努利數]
- 容斥原理學習筆記筆記
- HDU 4059 The Boss on Mars ( 容斥原理)
- HDU 4135 Co-prime(容斥原理+分解質因數)
- HDU4390Number Sequence(容斥原理)
- HDU4407Sum ( 容斥原理)
- 有標號DAG計數 [容斥原理 子集反演 組合數學 fft]FFT
- 容斥
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- HDU2841 Visible Trees (容斥原理)
- 反射容斥反射
- bzoj 3812: 主旋律 [容斥原理 狀壓DP]
- HDU 1695-GCD(容斥原理+尤拉函式)GC函式
- Min-Max 容斥
- cf449D. Jzzhu and Numbers(容斥原理 高維字首和)
- P1447 [NOI2010] 容斥原理
- [BZOJ4818][Sdoi2017][容斥原理][矩陣優化DP]序列計數矩陣優化
- HDU 4135——Co-prime(容斥原理&&二進位制列舉)
- CodeForces571A. Lengthening Sticks(組合數學-容斥)
- 2014ACM/ICPC亞洲區西安站 F題 color (組合數學,容斥原理)ACM
- Codeforces Gym 100548F Color (組合數+容斥)
- 容斥定理 AtCoder——FizzBuzz Sum Hard
- HDU 5072 Coprime (單色三角形問題+容斥原理)
- 【陣列】1394. 找出陣列中的幸運數(簡單)陣列
- 容斥 + 組合數學 ---Codeforces Round #317 A. Lengthening Sticks
- 數字簽名原理
- 數字證書原理
- Android自定義幸運轉盤Android
- 少數幸運兒We Happy Few高畫質動態桌布APP
- 藍橋杯2023年A組-試題A-幸運數
- Elgamal數字簽名原理GAM
- 利用容斥原理求尤拉計劃565題的S(1E9,2017)