2019icpc银川网络赛-A Maximum(思维)

题目链接:https://nanti.jisuanke.com/t/41285

题意:维护一个栈,支持入栈和出栈操作,并计算每次操作后的栈中最大值,得到最终结果。

思路:

  外面吵得风生水起,我校平静地在打比赛,丝毫不知道这次比赛的题目就是把2018银川邀请赛的题照搬过来了QAQ,主办方真牛逼。。

  这题真的是,我和hxc轮流做这道题,被坑惨了,一直以为使用数据结构来做,没想到点上去。思维题,每次保证栈顶为栈中最大元素。如果当前入栈的元素为x,当前栈顶元素为y,如果x>=y,这个没问题,直接入栈就行了; 如果x<y,我们相当于直接用y替换x,再入栈即可。

  吸取教训,这种过的人很多的,不要想复杂,怎么简单怎么来。

AC代码:

#include<cstdio>
#include<algorithm>
#include<set>
#include<map>
using namespace std;

const int maxn=5e6+5;
typedef unsigned int UI;
int T,cas,top;
UI stk[maxn];
long long ans;

int n,p,q,m;
unsigned int SA,SB,SC;
unsigned int rng61(){
    SA^=SA<<16;
    SA^=SA>>5;
    SA^=SA<<1;
    unsigned int t=SA; SA=SB;
    SB=SC;
    SC^=t^SA;
    return SC;
}

void gen(){
    scanf("%d%d%d%d%u%u%u",&n,&p,&q,&m,&SA,&SB,&SC);
    for(int i=1;i<=n;++i){
        if(rng61()%(p+q)<p){
            stk[++top]=rng61()%m+1;
            stk[top]=max(stk[top-1],stk[top]);
        }
        else
            if(top>0) --top;
        ans^=1LL*i*stk[top];
    }
}

int main(){
    scanf("%d",&T);
    while(T--){
        ans=0;
        top=0;
        gen();
        printf("Case #%d: %lld\n",++cas,ans);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/FrankChen831X/p/11440426.html

时间: 2024-08-01 00:02:03

2019icpc银川网络赛-A Maximum(思维)的相关文章

2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)

2019ICPC南京网络赛A题 The beautiful values of the palace https://nanti.jisuanke.com/t/41298 Here is a square matrix of n * nn?n, each lattice has its value (nn must be odd), and the center value is n * nn?n. Its spiral decline along the center of the squar

2019银川网络赛

??A. Maximum Element In A Stack ??B. Rolling The Polygon ??C. Caesar Cipher ??D. Take Your Seat E. 2-3-4 Tree ??F. Moving On G. Factories 树形DP + 背包 https://blog.csdn.net/dllpXFire/article/details/81085093 https://blog.csdn.net/starlet_kiss/article/de

【找规律】计蒜客17118 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 E. Maximum Flow

题意:一张有n个点的图,结点被编号为0~n-1,i往所有编号比它大的点j连边,权值为i xor j.给你n,问你最大流. 打个表,别忘了把相邻两项的差打出来,你会发现神奇的规律……你会发现每个答案都是由某些特定的数加起来组成的,最好把它们也打出来. #include<cstdio> using namespace std; typedef long long ll; #define MOD 1000000007ll ll n; int main(){ // freopen("e.ou

2019icpc南京网络赛 A 主席树

题意 给一个\(n\times n\)的螺旋矩阵,给出其中的\(m\)个点的值分别为各个点上数字的数位之和,给出\(q\)个询问,每次询问从\((x1,y1)\)到\((x2,y2)\)的子矩阵的和. 分析 用官方题解的方法\(O(1)\)推出点\((x,y)\)上的值,将这\(m\)个点按\(x\)排序后依次按\(y\)建主席树,查询时找到对应的\(x1\)和\(x2\)的历史版本,查询\(y1\)到\(y2\)的权值和就行了,\((query(y1,y2,1,n,rt[l],rt[r]))\

2019ICPC南京网络赛B super_log——扩展欧拉定理

题目 设函数 $$log_a*(x) = \begin{cases}-1, & \text{ if } x < 1 \\ 1+log_a*(log_ax) & \text{ if } x \geq 1 \end{cases}$$ 求最小的正整数 $x$,使得 $log_a*(x) \geq b$ 分析 通过将递归式展开,展开 $b$ 次等于1,所以 $x$ 为 $a^{a^{a^{...}}}$(共 $b$ 次) 由欧拉降幂公式 $$a^b= \begin{cases} a^{b \

【2019银川网络赛】L:Continuous Intervals

题目大意:给定一个长度为 N 的序列,定义连续区间 [l, r] 为:序列的一段子区间,满足 [l, r] 中的元素从小到大排序后,任意相邻两项的差值不超过1.求一共有多少个连续区间. 题解:单调栈 + 线段树 首先,对于区间计数类问题常规的思路是枚举区间的左端点或右端点,统计以该点为端点的区间个数,加入答案贡献. 对于这道题来说,不妨枚举答案的右端点 r,那么对于每个 r,需要快速得出有多少个左端点 l,使得区间 [l, r] 满足连续区间的性质.若能在 \(O(logn)\) 的时间内得出答

2019icpc南昌网络赛

B. Fire-Fighting Hero (dijstra优先队列+bfs) 题意:刚开始看错题了,以为是k次dijkstra,但是wa了,后来队友指正后发现挺水的.求S到其它点的最短路的最大值ans1,然后求其它点到指定k个点之一的最短路的最大值ans2.比较ans1和ans2即可. 思路:用dijstra优化队列求ans1,k次优先队列bfs求ans2即可. AC code: #include<cstdio> #include<algorithm> #include<c

2019ICPC南昌网络赛总结

打的很崩的一场比赛.上来签到题我就wa了一发,感觉在梦游.然后我开了H题,队友开B题,f(n)=3f(n-1)+2f(n)傻子都知道矩阵快速幂,但是1e7的强制在线必须把logn优化,然后试图打表寻找循环节,也没找到,然后对矩阵进行研究,看着矩阵快速幂 $\left(\begin{matrix}3 & 2 \\1 & 0 \end{matrix}\right)$这个矩阵长得挺好看的,试图寻找O(1)计算出 $\left(\begin{matrix}3 & 2 \\1 & 0

2019icpc沈阳网络赛

J题: 题意:给你一张大小为n的不确定的图,这个图不确定,每个点的入度和出度都为1.那么这样的图的一个特点就是肯定由若干个欧拉回路组成的.   可以得到递推公式就是n! 然后就再看它还有一个特点.要求每个点必须走不大于x条边能回到自身.......    (n<=2*x<2e9) 我们肯定只能从反面想,把它不符合条件的都去除,因为(n<=2*x<2e9) 这个条件注定了可以这样想....... 由于有 p(m)=c(m,n)*(m-1)!*(n-m)!/n!=1/m    所以对于