• Gym 100989H


    After the data structures exam, students lined up in the cafeteria to have a drink and chat about how much they have enjoyed the exam and how good their professors are. Since it was late in the evening, the cashier has already closed the cash register and does not have any change with him.

    The students are going to pay using Jordanian money notes, which are of the following types: 1, 5, 10, 20, 50.

    Given how much each student has to pay, the set of notes he’s going to pay with, and the order in which the students arrive at the cashier, your task is to find out if the cashier will have enough change to return to each of the student when they arrive at the cashier.

    Input

    The first line of input contains a single integer N (1 ≤ N ≤ 105), the number of students in the queue.

    Each of the following N lines describes a student and contains 6 integers, KF1F2F3F4, and F5, where K represents the amount of money the student has to pay, and Fi (0 ≤ Fi ≤ 100) represents the amount of the ith type of money this student is going to give to the cashier.

    The students are given in order; the first student is in front of the cashier.

    It is guaranteed that no student will pay any extra notes. In other words, after removing any note from the set the student is going to give to the cashier, the amount of money will be less than what is required to buy the drink.

    Output

    Print yes if the cashier will have enough change to return to each of the students when they arrive in the given order, otherwise print no.

    Examples

    Input
    3
    4 0 1 0 0 0
    9 4 1 0 0 0
    8 0 0 1 0 0
    Output
    no
    Input
    3
    9 4 1 0 0 0
    4 0 1 0 0 0
    8 0 0 1 0 0
    Output
    yes

    题意:n个人买东西去柜台是否能全部找钱,k表示要付的钱,后面的数对应钞票1,5,10,20,50的数量,起初柜台里是没钱的。

    思路:必须先判断能不能找零,之后才能拿钱,一开始没注意一直卡在第九组数据。如果第一个人给的钱不能刚好支付完,则没有零钱找给他,所以这种情况就直接no,后面假装输入一下就可以continue掉。如果需要找零钱,先找面值最大的,如果最后能找完,则收下他付的钱。
    代码如下:
    #include<iostream>
    #include<cstring>
    using namespace std;
    int main()
    {
    	int n;
    	int s[5]={1,5,10,20,50};
    	int v[5]={0};
    	int a[5];
    	long long int k;
    	cin>>n;
    	int flag=0,c=0;
    	while(n--)
    	{
    		c++;
    		cin>>k;
    		long long int t=0;
    		for(int i=0;i<5;i++)
    		{
    			cin>>a[i];
    			t+=a[i]*s[i];
    		}
    		if(flag)
    		continue;
    		k=t-k;
    		if(k==0)
    		{
    			for(int i=0;i<5;i++)
    			v[i]+=a[i];
    		}
    		else
    		{
    			if(c==1)
    			{
    				flag=1;
    				continue;
    			}
    			while(k>0)
    			{
    				while(k>=s[4]&&v[4])
    				{
    					k-=s[4];
    					v[4]--;
    				}
    				if(k==0)
    				break;
    				while(k>=s[3]&&v[3])
    				{
    					k-=s[3];
    					v[3]--;
    				}
    				if(k==0)
    				break;
    				while(k>=s[2]&&v[2])
    				{
    					k-=s[2];
    					v[2]--;
    				}
    				if(k==0)
    				break;
    				while(k>=s[1]&&v[1])
    				{
    					k-=s[1];
    					v[1]--;
    				}
    				if(k==0)
    				break;
    				while(k>=s[0]&&v[0])
    				{
    					k-=s[0];
    					v[0]--;
    				}
    				if(k==0)
    				break;
    				if(k>0)
    				{
    					flag=1;
    					break;
    				}
    			}
    			if(flag==0)
    			{
    				for(int i=0;i<5;i++)
    				v[i]+=a[i];
    			}
    		}
    	}
    	if(flag==1)
    	cout<<"no"<<endl;
    	else
    	cout<<"yes"<<endl;
    	return 0;
    }
    

      

  • 相关阅读:
    Cordova4.0 系列 -- 基本环境搭建(1)
    随便写写2015创业记(三)
    有哪些好用的数据分析工具?
    文字检测识别系统好用吗?都针对什么进行识别?
    用户奖励体系有哪些反作弊的机制?
    1月第2周业务风控关注|“扫黄打非”部门查处互动作业、纳米盒等20多个学习类App
    一个docker容器中运行多个服务还是弄一堆docker容器运行?
    手机app有了短信验证码还有没必要有图片验证码?
    2019年微服务实践第一课,网易&谐云&蘑菇街&奥思技术大咖深度分享
    1月第1周业务风控关注| 国家网信办启动专项行动 剑指12类违法违规互联网信息
  • 原文地址:https://www.cnblogs.com/spongeb0b/p/9272630.html
Copyright © 2020-2023  润新知