有一台自动售票机,每张票卖5元。售票机可以接受5元、10元、20元的纸币。接受大面额纸币时,若没有足够的零钱,售票机将拒绝售票并将纸币退还给客户,若有零钱足够,售票机必须出票并且找零。
一开始,售票机里没有任何零钱。
每位客户只买一张票也只会塞一张纸币。按照购票顺序,给定售票机收到的n张纸币的面额。请统计售货机最多能够卖出多少张票。 输入格式
第一行:单个整数n 第二行:n个整数表示n名客户分别塞入的纸币面额,保证只能是5、10、20 中的一个。 输出格式
单个整数:表示售票机卖出的最多票数。 数据范围
1≤n≤50,000
样例数据
输入
8
10 5 5 5 10 10 20 20
输出
6
说明
由于没有零钱,无法把票卖给第一个人和最后一个人
代码:
#include<bits/stdc++.h>
using namespace std;
int n,x,sum,ans,f[100];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1; i<=n; i++) {
cin>>x;
int c=x-5;
if(sum>=c) {
if(c==0)
sum+=5,ans++,f[5]++;
else if(c==5) {
if(f[5]>0)
f[5]--,sum+=5,ans++,f[10]++;
} else {
if(f[5]>=3)
f[5]-=3,sum+=5,ans++,f[20]++;
else if(f[5]>0 && f[10]>0)
f[5]--,f[10]--,sum+=5,ans++,f[20]++;
}
}
}
cout<<ans;
return 0;
}