题解:AT_arc172_a [ARC172A] Chocolate

· · 题解

觉得题解的思路都有些繁琐。

我的思路是如果当前填入的面积中能填的当前枚举到的正方形个数超过能填的总个数,那就肯定不行,退出。

如果最后都没有退出,就可以。

从大到小排序以保证面积中能填的当前枚举到的正方形个数为整数,因为是 2 的正整数次幂。

感性理解一下,如果当前填入的总面积中能填的当前枚举到的正方形个数超过能填的总个数,那无论如何,一定是放不下了。

而如果当前填入的总面积中能填的当前枚举到的正方形个数没超过能填的总个数,那一定能通过一些方式使它可以放得下。

而且对于当前正方形之前的每一个正方形,都可以放得下,因为还没有退出。

这时只考虑当前正方形即可。


#include<bits/stdc++.h>
#define int long long
using namespace std;
int h,w,n,a[1005],ans;
signed main()
{
    cin>>h>>w>>n;
    for(int i=1;i<=n;i++) cin>>a[i],a[i]=(1<<a[i]);
    sort(a+1,a+n+1,greater<int>());
    for(int i=1;i<=n;i++)
    {
        ans+=(a[i]*a[i]);
        if(ans/(a[i]*a[i])>(h/a[i])*(w/a[i]))
        { 
            cout<<"No";
            return 0;
        }
    } 
    cout<<"Yes"; 
    return 0;
}