Daenerys Targaryen has an army consisting of k groups of soldiers, the i-th group contains ai soldiers. She wants to bring her army to the other side of the sea to get the Iron Throne. She has recently bought an airplane to carry her army through the sea. The airplane hasn rows, each of them has 8 seats. We call two seats neighbor, if they are in the same row and in seats {1, 2}, {3, 4}, {4, 5}, {5, 6} or{7, 8}.

Daenerys Targaryen wants to place her army in the plane so that there are no two soldiers from different groups sitting on neighboring seats.
Your task is to determine if there is a possible arranging of her army in the airplane such that the condition above is satisfied.
The first line contains two integers n and k (1 ≤ n ≤ 10000, 1 ≤ k ≤ 100) — the number of rows and the number of groups of soldiers, respectively.
The second line contains k integers a1, a2, a3, ..., ak (1 ≤ ai ≤ 10000), where ai denotes the number of soldiers in the i-th group.
It is guaranteed that a1 + a2 + ... + ak ≤ 8·n.
If we can place the soldiers in the airplane print "YES" (without quotes). Otherwise print "NO" (without quotes).
You can choose the case (lower or upper) for each letter arbitrary.
解题思路
先装四个座位,再装2个座位,最后装一个座位
循环三次 依次减去座位数
1.第一次循环 减去每个队需要的4个座位的行数 如果够减就减 如果不够减就不减 sum1=n为4个座位的行数n,d=min(sum1,a[i]/4)
那么a[i]的值减少了4*d个,sum1的值就减少了d个 不够减就是说sum1<a[i]/4,那么sum1有几个就减几个
2.第二次循环 sum2=n*2+sum1 减去每个队需要的2个座位的行数 如果够减就减 如果不够就不减 知道最后一个
3.第三次循环 temp=sum2+sum1,因为如果四个座位坐两个的话 那么还有两个座位是可以坐一个人的所以还要加上一个sum1,然后temp=temp-a[i];a[i]的值就表示它需要多少行
最后看temp是否>=0 是就能坐满 不是就不能
#include <iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int a[105];
int main()
{
//freopen("E:\\file.txt","r",stdin);
int n,k;
cin>>n>>k;
for(int i=0;i<k;i++)
cin>>a[i];
int sum1=n,sum2=n*2;
for(int i=0;i<k;i++)
{
int d=min(sum1,a[i]/4);
a[i]=a[i]-d*4;
sum1=sum1-d;
}
sum2=sum1+sum2;
for(int i=0;i<k;i++)
{
int d=min(sum2,a[i]/2);
a[i]=a[i]-d*2;
sum2=sum2-d;
}
int temp=sum1+sum2;
for(int i=0;i<k;i++)
{
temp=temp-a[i];
}
if(temp>=0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}