• Test5反思


    考试资料下载链接:
    戳我

    这次考试整体难度并不是非常的难,但是我还是觉得有一点困难那么因为这次三道题都已经被解决了,所以说这次的解题思路分析我就稍微少写一点。

    T1

    一道非常妙妙的题目,经过我们的研究发现这道题其实只是一道神奇的贪心,我们的思路那么就非常的简单了,我们根据dfs序来更新每一个节点的大小,节点大小的定义是这样的,如果该节点为叶子节点,那么这个点的大小为1,如果是求和操作,那么该节点的大小为其儿子节点大小之和,如果为取大操作,那么该节点的大小就为其两个儿子中最大的那一个,最后我们就可以得到根节点的大小,然后我们就可以在所选取的数中,选取根节点那个大小的那么多个,就为我们所要求的东西。

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    char ch[10005];
    int cnt=0,lenc,n,x[10005],root,sum;
    int Buildtree(int k)
    {
    	cnt++;k=cnt;
    	if(ch[k]=='X') return 1;
    	int l,r;
    	l=Buildtree(k),r=Buildtree(k);
    	if(ch[k]=='A') return l+r;
    	return max(l,r);
    }
    bool cmp(int a,int b)
    {
    	if(a>b)return true;return false;
    }
    int main()
    {
    	scanf("%s",ch+1);lenc=strlen(ch+1);
    	int lim=Buildtree(root);
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i) scanf("%d",&x[i]);
    	sort(x+1,x+n+1,cmp);
    	for(int i=1;i<=lim;++i)sum+=x[i];
    	printf("%d",sum);
    	return 0;
    }
    

    T2

    我觉得这道题我应该不用说什么了,没打出来的同学一定是状态不好,或者是跟我一样陷入了误区,把简单的问题复杂化。

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    long long n,a[1000005];
    long long sum;
    int main()
    {
    	freopen("seq.in","r",stdin);freopen("seq.out","w",stdout);
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    	{
    		scanf("%d",&a[i]);
    		if(i>1) sum+=max(a[i-1],a[i]);
    	}
    	printf("%lld",sum);
    	//freopen(stdin);freopen(stdout);
    	fclose(stdin);fclose(stdout);
    	return 0;
    }
    

    T3

    这道题是一道标准的链表题,这也是本人第一次接触链表类题目,因为今天的精神状态不佳,所以说详细的讲解将留到以后完善:

    代码如下:(相信大家认真看一下也是没有问题的!)

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2001;
    int A[2004][2004],num[2004][2004],val[2004][2004],n,m,q;
    int X[5000500],Y[5000500];
    void spawning(int P,int Q,int R,int S,int Mod){
    	int T=0;
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			T=(T+(1ll*(i+j)*P+1ll*i*j*Q+1ll*i*R+1ll*j*S)%Mod+Mod)%Mod,A[i][j]=T;
    	A[P%n+1][P%m+1]^=1;A[P%n+1][Q%m+1]^=1;A[P%n+1][R%m+1]^=1;A[P%n+1][S%m+1]^=1;
    	A[Q%n+1][P%m+1]^=1;A[Q%n+1][Q%m+1]^=1;A[Q%n+1][R%m+1]^=1;A[Q%n+1][S%m+1]^=1;
    	A[R%n+1][P%m+1]^=1;A[R%n+1][Q%m+1]^=1;A[R%n+1][R%m+1]^=1;A[R%n+1][S%m+1]^=1;
    	A[S%n+1][P%m+1]^=1;A[S%n+1][Q%m+1]^=1;A[S%n+1][R%m+1]^=1;A[S%n+1][S%m+1]^=1;
    }
    void prepare()
    {
    	for(int i=0;i<=n+1;++i)for(int j=0;j<=m+1;++j)num[i][j]=i*N+j;
    	for(int i=0;i<=n+1;++i)for(int j=0;j<=m+1;++j)
    	X[num[i][j]]=num[i][j+1],Y[num[i][j]]=num[i+1][j],val[i][j]=A[i][j];
    }
    void modify(int x,int y,int x1,int y1,int h,int w)
    {
    	int now1,now2,now3,now4;
    	now1=num[x][0];now2=num[x1][0];
    	for(int i=1;i<y;++i) now1=X[now1];
    	for(int i=1;i<y1;++i) now2=X[now2];
    	now3=X[now1];now4=X[now2];
    	for(int i=1;i<w;++i)now3=X[now3],now4=X[now4];
    	for(int i=0;i<h;++i)
    	{
    		swap(X[now1],X[now2]);
    		swap(X[now3],X[now4]);
    		now1=Y[now1],now2=Y[now2];
    		now3=Y[now3],now4=Y[now4];
    	}
    	now1=num[0][y];now2=num[0][y1];
    	for(int i=1;i<x;++i) now1=Y[now1];
    	for(int i=1;i<x1;++i) now2=Y[now2];
    	now3=Y[now1];now4=Y[now2];
    	for(int i=1;i<h;++i) now3=Y[now3],now4=Y[now4];
    	for(int i=0;i<w;++i)
    	{
    		swap(Y[now1],Y[now2]);
    		swap(Y[now3],Y[now4]);
    		now1=X[now1],now2=X[now2];
    		now3=X[now3],now4=X[now4];
    	}
    }
    void query()
    {
    	int p1=0,x,y;
    	for(int i=1;i<=n;++i)
    	{
    		p1=num[i][0];
    		for(int j=1;j<=m;++j)
    		{
    			p1=X[p1];
    			y=p1%N;
    			x=p1/N;
    			A[i][j]=val[x][y];
    		}
    	}
    }
    void checker(){
    	long long Pin=0;
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			Pin+=(1ll*i*n+j)*A[i][j];
    	printf("%lld
    ",Pin);
    }
    int main()
    {
    	int a,b,c,d,e;
    	scanf("%d%d%d%d%d%d%d%d",&n,&m,&q,&a,&b,&c,&d,&e);
    	spawning(a,b,c,d,e);prepare();
    	for(int i=1;i<=q;++i)
    	{
    		int x,y,x1,y1,h,w;
    		scanf("%d%d%d%d%d%d",&x,&y,&x1,&y1,&h,&w);
    		modify(x,y,x1,y1,h,w);
    	}
    	query();
    	checker();
    	return 0;
    }
    
  • 相关阅读:
    两台电脑之间怎么用一根网线传输数据
    IDEA的几个常用配置,日常开发必备
    idea 配置Maven
    IDEA2019 安装和激活
    HTML中各类空格占位符
    jackSon注解-- @JsonInclude 注解不返回null值字段
    Vscode配置Eslint
    Tomcat中容器是什么以及容器与容器之间的数量关系。
    请求是如何传递给StandardEngine的?
    Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。
  • 原文地址:https://www.cnblogs.com/mudrobot/p/13329377.html
Copyright © 2020-2023  润新知