51Nod1010解题报告
题目地址:
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010
题目概述:
以后51Nod的题面都省略了。
大致思路:
读完题之后感觉水水的暴力啊,交了一发T,然后发现暴力爆精度了,改了精度WA,然后打算写另外一个暴力,TLE。
看了一下数据,发现还是WA在了精度上,改了之后过了。
不甘心的我去看了看正解,发现只含有2、3、5因子的数竟然不会超过343000!!!建议你们还是预处理加二分吧。
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <vector> #include <ctime> #include <map> #include <assert.h> #include <stack> #include <set> #include <bitset> #include <queue> #include <cstring> #include <algorithm> using namespace std; #define sacnf scanf #define scnaf scanf #define scnafi scanfi #define pb push_back #define Len size() #define gchar getchar() #define FOR(i,j,k) for(int (i)=(j);(i)<=(k);(i)++) #define mes(a,b) memset((a),(b),sizeof(a)) #define scanfi(a) scanf("%d",&(a)) #define scanfti(a,b) scanf("%d%d",&(a),&(b)) #define println(a) printf("%d\n",(a)) #define print_b printf("\n") #define IsNum(x) '0'<=(x)&&(x)<='9' #define lt dir*2 #define rt dir*2+1 #define maxn 2000010 #define maxm 26 #define inf 1061109567 //const long long inf=1e15; #define INF 0x3f3f3f3f #define eps 1e-9 #define E 2.718281828459 const double PI=acos(-1.0); #define mod 998244353 #define MAXNUM 1000000000 typedef long long ll; typedef unsigned long long ulld; ll Abs(ll x) {return (x<0)?-x:x;} int Read() {char ch;int res=0;while(ch=getchar(),!(IsNum(ch)));while(IsNum(ch)) res=res*10+ch-'0',ch=getchar();return res;} int main() { //freopen("data.in","r",stdin); //freopen("std.out","w",stdout); //clock_t st=clock(); int T;scanfi(T); while(T--) { ll n,ans=-1; scanf("%I64d",&n); if(n==1) {printf("2\n");continue;} int mx=59;ll t2=1,t3=1,t5=1,tmp=0,_tmp; FOR(i,0,mx) { FOR(j,0,mx) { if(t2*t3<=0) break; if(t2*t3>=n) {ans=min(ans,t2*t3);break;} FOR(k,0,mx-i) { _tmp=tmp;tmp=t2*t3*t5;_tmp=tmp; if(tmp<_tmp) break; //68719476736 14348907 125 if(tmp>=n) { if(ans==-1||ans>tmp) ans=tmp; break; } t5*=5; } t3*=3;t5=1; } t2*=2;t3=t5=1; } printf("%I64d\n",ans); } //clock_t ed=clock(); //printf("\n\nTime Used : %.5lf Ms.\n",(double)(ed-st)/CLOCKS_PER_SEC); return 0; } /*506781279576915968*/ /*507227047723008000*/