• NOIP 2018 普及组 解题报告


    先来解释一下为毛现在才来发解题报告:
    其实博主是参加过NOIP 2018普及组的复赛的,不过当时成绩垃圾的一批。只混到一个三等奖......

    今天老师又给考了一遍noip2018普及的题,结果第三题还是不太会,卧槽.....这.....不过我竟然用暴力dfs+剪枝过了(只是在网上luogu过了,本地TLE下面会说到的,咕咕咕)

    下面是正式的解题报告:

    标题统计

    题目链接

    来玩啊

    思路

    没什么好说的,不会请右上角

    代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<map>
    #include<string>
    #include<cstring>
    using namespace std;
    inline int read() {
    	char c = getchar(); int x = 0, f = 1;
    	while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    	while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    	return x * f;
    }
    char s;
    int ans;
    int main()
    {
    	while(cin>>s)
    	{
    		if(s!='
    '&&s!=' ')
    		{
    			ans++;
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    

    龙虎斗

    题目链接:

    点这里

    思路

    就是直接模拟,枚举你支援的兵放到的兵营,然后找到气势差最小的就行了,注意开long long可恶的CCF竟然卡我们long long

    一定要开long long !
    一定要开long long !
    一定要开long long !

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    using namespace std;
    long long int l=0,h=0,m,p1,s1,s2,n,chushi[100000],ans,p2,pam,ltag,htag,tag;
    long long int chazhi=0;
    int main()
    {
    	scanf("%lld",&n);
    	for(int i=1;i<=n;++i)
    	{
    		cin>>chushi[i];
    	}
    	cin>>m>>p1>>s1>>s2;
    	if(p1!=m)
    	chushi[p1]=chushi[p1]+s1;
    	for(int i=1;i<m;++i)
    	{
    		l=l+chushi[i]*(m-i);
    	}
    	for(int i=m+1;i<=n;++i)
    	{
    		h=h+chushi[i]*(i-m);
    	}
    	chazhi=abs(l-h);
    	tag=chazhi;
    	ltag=l;
    	htag=h;
    	pam=-9876;
    	ans=chazhi;
    	for(int i=1;i<=n;++i)
    	{
    		
    		if(i<m)
    		{
    			l=l+s2*(m-i);
    			chazhi=abs(l-h);
    			if(chazhi<ans)
    			{
    				p2=i;
    				ans=chazhi;
    				tag=chazhi;
    				pam=ans;
    				l=ltag;
    			}
    			else
    			{
    				chazhi=tag;
    				l=ltag;
    			}
    		}
    		if(i>m)
    		{
    			h=h+s2*(i-m);
    			chazhi=abs(l-h);
    			if(ans>chazhi)
    			{
    				p2=i;
    				ans=chazhi;
    				tag=chazhi;
    				h=htag;
    				pam=ans;
    			}
    			else
    			{
    				chazhi=tag;
    				h=htag;
    			}	
    		}
    	}
    	if(pam==-9876)
    	cout<<m;
    	else
    	cout<<p2;	
    	return 0;
    }
    

    摆渡车

    题目链接:

    前方核能

    思路

    4个题里最难的一个了,不过时限也给了良心的2s(注意这里)

    Sjp ak IOI!

    对称二叉树

    题目链接

    来快活啊

    思路:

    乍一看很难,其实仔细一想并不难

    所谓对称二叉树就是把树从根节点划一条线两边对折后完全相同(注意无论结构还是数值都相同

    我们可以用递归的方式来遍历左右子树

    那么就可以来搞一下不对称的情况了

    第一种是结构不对称:

    就是只出现了一个-1没有同时递归到-1

    第二种是数值上不对称:

    只需判断左子树的左孩纸和右子树的右孩子已经左孩纸和右子树的左孩子和左子树的右孩子是不是数值相同就行了

    最后统计节点数维护一个max就行了

  • 相关阅读:
    【Kubernetes】Service 实现探索
    【Kubernetes】浏览器访问服务
    【Kubernetes】访问入口-Service
    oracle 分页查询
    本地cmd命令打war包、解压war包
    xp系统上安装和使用kettle
    VWware15安装windows XP纯净版虚拟机
    JDK8:HashMap源码解析:TreeNode类的balanceInsertion方法
    红黑树
    kettle JVM内存设置-
  • 原文地址:https://www.cnblogs.com/pyyyyyy/p/11086981.html
Copyright © 2020-2023  润新知