WA 40分 求解决
查看原帖
WA 40分 求解决
577683
Neil_Seniorious楼主2022/5/12 13:05
#include<cstdio>
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,maxd,ans[1010],bestans[1010];
int max(int a,int b){
    return a>b?a:b;
}
int gf(int a,int b){
    int res=b/a;
    if(res*a>=b) return res;
    else return res+1;
}
bool check(int d){
    for(int i=d;i>=1;i--){
        if(ans[i]!=bestans[i]){
            if(bestans[i]==-1 || bestans[i]<ans[i]) return 1;
            else return 0;
        }
    }
    return 0;
}
int gcd(int a,int b){
    if(b==0) return a;
    else{
        return gcd(b,a%b);
    }
}
bool dfs(int d,int from,int a,int b){
    if(d==maxd){
//    	system("pause");
        if(b%a!=0){
            return 0;
        }
        ans[d]=b/a;
//      for(int i=1;i<=d;i++){
//        	printf("%d ",ans[i]);
//		}
        if(check(d)){
            for(int i=0;i<=d;i++){
                bestans[i]=ans[i];
            }
        }
        return 1;
    }
    bool f=0;
    from=max(from,gf(a,b));
    for(int i=from;;i++){
        if(b*(maxd-d+1)<=i*a) break;
        ans[d]=i;
        int b2=b*i;
        int a2=a*i-b;
        int g=gcd(a2,b2);
        b2=b2/g;
        a2=a2/g;
        if(dfs(d+1,i+1,a2,b2)) f=1;
    }
    return f;
}
signed main() {
    scanf("%d%d",&a,&b);
    for(maxd=1;;maxd++) {
        if(dfs(1,gf(a,b),a,b)){
            break;
        }
    }
    for(int i=1;i<=maxd;i++) printf("%d ",bestans[i]);
    return 0;
}

代码整体是这样的。不知道哪里错了。有没有大佬指点一下QAQ

PS:勿喷,因为我是大蒟蒻

2022/5/12 13:05
加载中...