资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
有n个人正在饭堂排队买海北鸡饭。每份海北鸡饭要25元。奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25、50、100元),而且饭堂阿姨一开始没有任何零钱。请问饭堂阿姨能否给所有人找零(假设饭堂阿姨足够聪明)
输入格式
第一行一个整数n,表示排队的人数。
接下来n个整数a[1],a[2],...,a[n]。a[i]表示第i位学生手里钞票的价值(i越小,在队伍里越靠前)
输出格式
输出YES或者NO
样例输入
4
25 25 50 50
样例输出
YES
样例输入
2
25 100
样例输出
NO
样例输入
4
25 25 50 100
样例输出
YES
数据规模和约定
n不超过1000000
注:题目来自蓝桥杯
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000000 + 5;
int st_aunt[3];//25元和50元的数目
int s[maxn];
bool flag = 1;
int main()
{
int N;
cin >> N;
for(int i = 0; i < N; i++)
{
cin >> s[i];
}
if(s[0] != 25)//如果第一个人拿的钱不是25,则无法找钱
{
cout << "NO" << endl;
return 0;
}
else
{
for(int i = 0; i < N; i++)
{
if(s[i] == 25)
st_aunt[1]++;
else if(s[i] == 50)
{
if(!st_aunt[1])
{
cout << "NO" << endl;
return 0;
}
else
{
st_aunt[1]--;
st_aunt[2]++;
}
}
else if(s[i] == 100)//如果当前人拿的是100,则要分两种情况找钱,即50+25或者25*3
{
if(!st_aunt[2])
{
if(st_aunt[1] < 3)
{
cout << "NO" << endl;
return 0;
}
else
{
st_aunt[1] -= 3;
}
}
else
{
if(!st_aunt[1])
{
cout << "NO" << endl;
return 0;
}
else
{
st_aunt[1]--;
st_aunt[2]--;
}
}
}
}
}
cout << "YES" << endl;
return 0;
}