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 }