标签:org 灾难 int author hint cout 选择 ever 接下来
Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 86 Solved: 13
大G南征北战终于打下了大片土地成立了G国,大G在开国大典上传召帮助自己南征北战的三大开国元勋小A,小B,小C进殿,并要赏赐三人大量宝物以显示天恩浩荡。大G在征服其他国家的时候抢夺了n箱宝物,他把这些箱子依次排列在三人面前,每个箱子里的宝物都有一个价值wi,大G令他们一人选取一个箱子作为奖励。 可是令大G万万没有想到的是,三人在私底下是存在竞争关系的,由于小B手上兵权强于小C,小C手上兵权强于小A。所以弱者总是担心自己领取的赏赐高于或等于强者会招来杀身之祸。所以他们三人总是会让小B先选取奖励之后,小C会在小B选择的右侧区域选择价值比小B小的奖励,而小A则会在小B选择的左侧区域选择价值比小B和小C都小的奖励。当然小B是个聪明人,他也会考虑到两人的想法选择对大家都有帮助的方案选取。请问是否存在这样一种选择方案让大家都不用担心会招致杀身之祸。如果存在输出“YES”,否则输出“NO”
多组数据读入
每组数据第一行输入一个正整数n表示n箱宝物(n<=100000) 接下来一行输入n个正整数w1,w2,w3,...,wn表示n箱宝物的价值。(wi<=10000000) 题目保证所有数据n的总和不超过500000
如果存要求的选择方案则输出“YES”,否则输出“NO”。
6 1 2 3 6 5 4 6 1 2 3 4 5 6
YES NO
第一组数据中,小B可以先选择价值为6的箱子,小A可以在其左侧选择价值为2的箱子,小C可以在其右侧选择价值为5的箱子,这样大家都不用担心给自己招来杀身之祸。 第二组数据找不到任意一种选择方案,输出NO。
中南大学第十一届大学生程序设计竞赛
Forget_ever
1 #include<iostream> 2 #include<string> 3 #include<cstdio> 4 #include<stack> 5 #include<algorithm> 6 using namespace std; 7 int a[100005]; 8 int mi[100005]; 9 int ma[100005]; 10 stack<int> p; 11 int main() 12 { 13 int n,hz; 14 while(cin>>n) 15 { 16 while(!p.empty())p.pop(); 17 for(int i=1;i<=n;i++) 18 { 19 scanf("%d",&a[i]); 20 if(i==1) mi[i]=a[i]; 21 else mi[i]=min(mi[i-1],a[i]); 22 } 23 bool flag=false; 24 p.push(a[n]); 25 ma[n]=-1; 26 27 for(int i=n-1;i>=2;i--) 28 { 29 hz=-1; 30 while(!p.empty()&&p.top()<a[i]) 31 { 32 hz=p.top(); 33 p.pop(); 34 } 35 p.push(a[i]); 36 ma[i]=hz; 37 } 38 39 /* for(int i=2;i<=n;++i) 40 { 41 printf("%d ",ma[i]); 42 } 43 printf("\n");*/ 44 for(int i=2;i<n;++i) 45 { 46 if(mi[i-1]<ma[i]&&ma[i]<a[i]) 47 { 48 flag=1; 49 break; 50 } 51 } 52 if(flag) cout<<"YES"<<endl; 53 else cout<<"NO"<<endl; 54 } 55 return 0; 56 }
标签:org 灾难 int author hint cout 选择 ever 接下来
原文地址:http://www.cnblogs.com/52why/p/7461454.html