日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU - 5878 A - I Count Two Three H 技巧枚举

發布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU - 5878 A - I Count Two Three H 技巧枚举 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意

輸入 t (1≤t≤500000), the number of test cases. t test cases follow. Each test case provides one integer n (1≤n≤109).讓我們不小于n的最小的x滿足 x=2^a*3^b*5^c*7^d

分析

這道題其實就是個枚舉 但是不能隨便枚舉 比如 如果向這樣枚舉的話 scanf("%lld",&n);for(ll i=n;;i++){ll tem = i;while(tem%2==0)tem/=2;while(tem%3==0)tem/=3;while(tem%5==0)tem/=5;while(tem%7==0)tem/=7;if(tem==1){printf("%lld\n",i);break;}}

那鐵定是要TLE
case的數量是500000個 那平均輸入數據都比較大 每個數據要差不多搜索1000個數才能找到我們所想要找的數的話 就會發現 這里500000*1000 = 500000000 關鍵有些數據還不會僅僅的查找1000次就找到
所以這樣一定超時
我們看 既然枚舉數字比較麻煩
我們如果枚舉因子呢
我們已經知道 每個數的因子就是2,3,5,7
也就是說這個數一定能通過這四個數組合而成
如果我們通過枚舉這四個因子的數量去做呢
比如這樣

for(int f2=0;ff2<maxn;f2++,c++){f2==0?ff2*=1:ff2*=2;for(int f3 = 0;ff2*ff3<maxn;f3++,c++){f3==0?ff3*=1:ff3*=3;for(int f5=0;ff2*ff3*ff5<maxn;f5++,c++){f5==0?ff5*=1:ff5*=5;for(int f7=0;ff2*ff3*ff5*ff7<maxn;c++,f7++){f7==0?ff7*=1:ff7*=7;fac = ff2*ff3*ff5*ff7;if(fac<maxn)s.insert(fac);else break;}ff7=1;}ff5=1;}ff3=1;}

那可是快多了
也就是8萬多次循環就完成了

代碼如下:

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll maxn = 1e9+1; int main() {ll fac=1,ff,c=0;set<ll>s;ll ff2=1,ff3=1,ff5=1,ff7=1;for(int f2=0;ff2<maxn;f2++,c++){f2==0?ff2*=1:ff2*=2;for(int f3 = 0;ff2*ff3<maxn;f3++,c++){f3==0?ff3*=1:ff3*=3;for(int f5=0;ff2*ff3*ff5<maxn;f5++,c++){f5==0?ff5*=1:ff5*=5;for(int f7=0;ff2*ff3*ff5*ff7<maxn;c++,f7++){f7==0?ff7*=1:ff7*=7;fac = ff2*ff3*ff5*ff7;// cout<<fac<<endl;if(fac<maxn)s.insert(fac);else break;}ff7=1;}ff5=1;}ff3=1;}// cout<<c<<endl; 81510// cout<<s.size()<<endl; 7千多int t;scanf("%d",&t);while(t--){ll n;scanf("%lld",&n);printf("%lld\n",*(s.lower_bound(n)));}return 0; }

總結

以上是生活随笔為你收集整理的HDU - 5878 A - I Count Two Three H 技巧枚举的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。