P4745 B’s problem(b)
时间: 1000ms / 空间: 655360KiB / Java类名: Main
背景
冬令营入学测试
描述
题目描述
小B生活在一个很奇怪的国家里,这个国家的钱的面值只有可能是25,50,100的。小B最近在做社会实践,这次它选择在一个餐厅里干这件事情。但今天发生了一件有趣的事,这件事情是这个样子的,餐厅里大家都在排队买饭,粗心的打饭阿姨忘记要带零钱,并且所有排队打饭的人只带了一张钱。
具体地,第i个人带了一张面额为ai的钱,为了方便起见,我们规定每个人都想买价值25元的饭盒。阿姨显得不知所措。聪明的小B想到了一个方法,让带了25元的先买饭!这样阿姨就有了更多的零钱去找开一些面值较大的钱。
但这样对于一些人来说仍有可能找不开零钱,小B想知道是否存在一种排队方案,能够对所有人找开零钱。如果可行输出“YES”,否则输出“NO”。
输入格式
第一行一个数n,表示有n个想买饭的人。
接下来一行n个数ai,表示第i个人带着的钱的面额。
输出格式
输出“YES”或者“NO”。
备注
输入样例
3
25 50 100
输出样例
NO
数据范围
对于100%的数据n<=100,ai=25或者50或者100。
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 int n,s[105]; 6 int a=0,b=0; 7 8 void check() 9 { 10 cout<<"NO"<<endl; 11 exit(0); 12 } 13 14 int main() 15 { 16 cin>>n; 17 for(int i=0;i<n;i++) 18 cin>>s[i]; 19 sort(&s[0],&s[n]); 20 for(int i=0;i<n;i++) 21 { 22 if(s[i]==25)a++; 23 if(s[i]==50){b++;a--;if(a<0)check();} 24 if(s[i]==100) 25 { 26 if(a>=1&&b>=1) a-=1,b-=1; 27 else 28 if(a>=3) a-=3; 29 else 30 check(); 31 } 32 } 33 cout<<"YES"<<endl; 34 return 0; 35 }