zoukankan      html  css  js  c++  java
  • 洛谷 P4160 [SCOI2009]生日快乐 题解

    这道题的思路很明显就是搜索。

    考虑每次切割只有两种大的情况:平行长边或平行短边。

    不妨设平行长边,则切割的长度即为mx的公倍数(mx等于长边长度除以还需分割的数量)。

    那么就是一个比较容易实现的搜索题。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm> 
    #define int long long
    #define rep(i,s,e) for(register int i=s;i<=e;++i)
    #define dwn(i,s,e) for(register int i=s;i>=e;--i)
    using namespace std;
    inline int read()
    {
        int x=0,f=1;
        char c=getchar();
        while(c<'0'||c>'9') {if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9') {x=x*10+c-'0'; c=getchar();}
        return f*x;
    }
    inline void write(int x)
    {
        if(x<0){putchar('-');x=-x;}
        if(x>9)write(x/10);
        putchar(x%10+'0');
    }
    int n;
    double x,y;
    double dfs(double x,double y,int num)
    {
        if(num==1) return max(x,y)/min(x,y);
        double mx=x/num,my=y/num;
        double ans=99999999,ansx,ansy;
        for(int i=1;i<=num/2;++i)
        {
            ansx=max(dfs(mx*i,y,i),dfs(x-mx*i,y,num-i));
            ansy=max(dfs(x,my*i,i),dfs(x,y-my*i,num-i));
            ans=min(ans,min(ansx,ansy));
        }
        return ans;
    }
    signed main()
    {
        cin>>x>>y;
        n=read();
        double out=dfs(x,y,n);
        printf("%.6lf",out);
        return 0;
    }
  • 相关阅读:
    HDU1429:胜利大逃亡(续)
    HDU1728:逃离迷宫
    HDU1253:胜利大逃亡
    HDU1180:诡异的楼梯
    HDU1175:连连看(搜索)
    HDU1072:Nightmare
    HDU1074:Doing Homework
    Codeforces Round #259 (Div. 1)A(公式)
    HDU1430;魔板(BFS+康托展开)
    Codeforces785D
  • 原文地址:https://www.cnblogs.com/handsome-zyc/p/13647553.html
Copyright © 2011-2022 走看看