Maximum Element In A Stack Gym - 102222A思维+栈
Posted 1024-xzx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maximum Element In A Stack Gym - 102222A思维+栈相关的知识,希望对你有一定的参考价值。
2018-2019 ACM-ICPC, China Multi-Provincial Collegiate Programming Contest
https://vjudge.net/problem/Gym-102222A
只要按照题目给的步骤进行,而且题目给的代码,不要去去改,否则会错。一开始用一个临时变量去存rng61()的值,但其实不可以。
还有就是,除了题目给的几个数的数据类型不变以外其他的数包括stack都开long long ,否则会错在第2个点。
一个简单的思维,为了保持栈顶的元素始终为最大的元素,在push的时候判断一下,当前的栈顶元素和即将push到栈中的元素的大小,放大的。
1 #include <bits/stdc++.h> 2 using namespace std; 3 int n, p, q, m; 4 unsigned int SA, SB, SC; 5 stack<long long>sta; 6 long long maxn(long long a,long long b) 7 { 8 if(a>b) 9 return a; 10 else 11 return b; 12 } 13 unsigned int rng61() 14 { 15 SA ^= SA << 16; 16 SA ^= SA >> 5; 17 SA ^= SA << 1; 18 unsigned int t = SA; 19 SA = SB; 20 SB = SC; 21 SC^=t^SA; 22 return SC; 23 } 24 int main() 25 { 26 int t,cas=0; 27 scanf("%d",&t); 28 while(t--) 29 { 30 scanf("%d%d%d%d%u%u%u",&n,&p,&q,&m,&SA,&SB,&SC); 31 while(!sta.empty()) 32 sta.pop(); 33 long long ans=0; 34 for(int i=1;i<=n;i++) 35 { 36 if(rng61()%(p+q)<p) 37 { 38 long long tmp=rng61()%m+1; 39 if(sta.empty()) 40 sta.push(tmp); 41 else 42 { 43 long long x=sta.top(); 44 sta.push(maxn(tmp,x)); 45 } 46 } 47 else 48 { 49 if(!sta.empty()) 50 sta.pop(); 51 } 52 if(!sta.empty()) 53 ans^=i*sta.top(); 54 } 55 printf("Case #%d: %lld ",++cas,ans); 56 } 57 return 0; 58 }
以上是关于Maximum Element In A Stack Gym - 102222A思维+栈的主要内容,如果未能解决你的问题,请参考以下文章
find second maximum element in Binary search tree
Codeforces889C. Maximum Element
leetcode1646. Get Maximum in Generated Array