牛オフ59-Cの質問練習合成機器

タイトル(https://ac.nowcoder.com/acm/contest/4743/C)
材料の片がxおよび材料{B} BのY部分を有し、材料(B)を備えた2 3を有する材料を合成することができる牛肉材料4と材料(B)と設備の合成部分であってもよいです。牡牛座は、合成装置の数を最大化したいので、あなたは、ヘルプ牛肉になりました。

入力:
5
4. 8。
7 6。
8 10
100 4555
45465 24124
出力:
2
2
3
50
13917
データ範囲:
1 <= T <= 10000
。1 <= X、Y <= 1E9

ソリューション:
広い範囲のデータから、でも、タイムアウトのためになります。この時間は、私の最初の反応は、数学的に解くことのいずれかにある、または特殊なケースであり、特別な事情数学的に考えるよりも、明らかに簡単なので、私は、いくつかの特殊なケースを試してみました、これが真実であることを発見し、特定のコードを次のように

#include<iostream>
#include<math.h>
using namespace std;
typedef long long
int main()
{
    ll  t,a,b,A,B,ans,x,y;
    cin>>t;
    while(t--)
    {
        cin>>a>>b;
        if(4*b<=a)ans=b;/*这种情况下,a比b多很多,把这些b全部用于合成第2件装备,即使b用完了,a也还有多余,因为第二件装备比第一件装备对b的需求少,所以,这种情况下最大值就是b*/
        else
        {
            if(3*a-2*b<0)ans=a/2;//(不等式变形一下就是a/2<b/3)该情况就是b比a多很多,思考方式与上面类似
            else
            {  //这就是a,b差距不大的情况
                x=(4*b-a)/10,y=x+1;
                A=a-2*x,B=b-3*x;
                ans=x+min(A/4,B);
                A=a-2*y,B=b-3*y;
                ans=max(ans,y+min(A/4,B));
            }
        }
      cout<<ans<<endl;
    }
    return 0;
}
リリース3元の記事 ウォンの賞賛2 ビュー495

おすすめ

転載: blog.csdn.net/jahup/article/details/104905707