2014-10-30 23:14:34

A:直接模拟,需要注意的只有一点:如果顾客拿着100,那么可以找3张25或者1张50加一张25

 1 /*************************************************************************
 2     > File Name: a.cpp
 3     > Author: Nature
 4     > Mail: 564374850@qq.com 
 5     > Created Time: Thu 30 Oct 2014 08:00:05 PM CST
 6 ************************************************************************/
 7 
 8 #include <cstdio>
 9 #include <cstring>
10 #include <cstdlib>
11 #include <cmath>
12 #include <vector>
13 #include <map>
14 #include <set>
15 #include <stack>
16 #include <queue>
17 #include <iostream>
18 #include <algorithm>
19 using namespace std;
20 #define lp (p << 1)
21 #define rp (p << 1|1)
22 #define getmid(l,r) (l + (r - l) / 2)
23 #define MP(a,b) make_pair(a,b)
24 typedef long long ll;
25 const int INF = 1 << 30;
26 
27 int n;
28 int a[100010];
29 int v1,v2,v3;
30 
31 int main(){
32     v1 = v2 = v3 = 0;
33     scanf("%d",&n);
34     for(int i = 1; i <= n; ++i){
35         scanf("%d",&a[i]);
36     }
37     int flag = 1;
38     for(int i = 1; i <= n; ++i){
39         if(a[i] == 25) ++v1;
40         if(a[i] == 50){
41             if(v1 == 0){
42                 flag = 0;
43                 break;
44             }
45             --v1;
46             ++v2;
47         }
48         if(a[i] == 100){
49             if(v1 && v2){
50                 --v1;
51                 --v2;
52             }
53             else if(v1 >= 3){
54                 v1 -= 3;
55             }
56             else{
57                 flag = 0;
58                 break;
59             }
60         }
61     }
62     if(flag) printf("YES\n");
63     else printf("NO\n");
64     return 0;
65 }
View Code

相关文章: