站外题求助!!!悬赏关注!!!
  • 板块题目总版
  • 楼主noip_ioi_luck
  • 当前回复14
  • 已保存回复14
  • 发布时间2023/1/30 16:16
  • 上次更新2023/10/24 02:32:33
查看原帖
站外题求助!!!悬赏关注!!!
679549
noip_ioi_luck楼主2023/1/30 16:16

题目描述

有一台自动售票机,每张票卖55元。售票机可以接受55元、1010元、2020元的纸币。接受大面额纸币时,若没有足够的零钱,售票机将拒绝售票并将纸币退还给客户,若有零钱足够,售票机必须出票并且找零。

一开始,售票机里没有任何零钱。

每位客户只买一张票也只会塞一张纸币。按照购票顺序,给定售票机收到的nn张纸币的面额。请统计售货机最多能够卖出多少张票。 输入格式

第一行:单个整数nn 第二行:nn个整数表示nn名客户分别塞入的纸币面额,保证只能是5510102020 中的一个。 输出格式

单个整数:表示售票机卖出的最多票数。 数据范围

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;
}

2023/1/30 16:16
加载中...