zoukankan      html  css  js  c++  java
  • 2020.02.01【NOIP提高组】模拟B 组总结反思——数列(sequence) 树 【2012东莞市选】时间流逝 挖掘机技术哪家强

    T1 数列(sequence)

    比赛时

    我自以为是地打了简简单单一个判断~~~

    之后

    Waiting……

    T2 2753. 树(tree)

    比赛时

    这题我居然比赛时也想了很久,可能是因为我太懒,我很早意识到lca的思想可以做,但是我还是想有什么办法更简单,如一个玄学的DFS、诡异的树形DP(显然时间会炸),浪费了我很多时间,最终我没有想到。我就来讲讲lca的做法吧,由于路径中节点的深度必须是升序的,可以知道一条路径,它的起点必定是终点的祖先,符合lca。(n leq 100000),那么枚举终点,设两个数组:(fa[i][j])表示编号为i的节点向上跳(2^j)次的节点,(a[i][j])表示编号为i的节点向上跳(2^j)次途中遇到的节点价值总和。原汁原味的lca判断的是深度,这里改一改就可以了,设变量(sum=b[x])(x表示终点),每次向上跳时判断(sum+a[x][j] < s),跳的时候加一下就可以了。时间复杂度为(O(20n)),显然这个20非常小,可以不写。

    之后

    有同学用了暴力居然都过了,这卡常居然能过,不公平呀,数据也太水了吧。

    总结

    不能太懒,想到一个AC的方法,如果在短时间内没有想到更简单的方法,则打。

    T3 2754. 【2012东莞市选】时间流逝(flow)

    比赛时

    一看到概率,我就几乎想放弃,我不知道因为概率的存在期望天数怎么算(但其实很简单,我太蒟了~~)

    之后

    没有之后~~~没几个人做对,听不懂。

    T4 3858. 挖掘机技术哪家强 shoberu

    题目描述

    给出n,求出n的每个因数x的难挖指数的和,难挖指数是所有与x互质的数y的和(包括1,(1 leq y leq x)

    比赛时

    一看到这是偏数学题,就泄了气。n太大了,1000000000,而且多组数据,1000组。我就想,可以枚举x,时间复杂度约为(O(3000)),那么处理x的难挖指数的时间复杂度最多用(O(10)),没有想到高效求的方法。想来想去,并没有想到什么规律。放弃~

    之后

    正解:欧拉函数,可惜我还没学。欧拉函数可以求出对于一个x,y有多少个,和本题题意极其相似。我们发现:对于一个x,y总是成对出现(证明是显然的,若 p 与 x 互质,那么p 与 x-p 也互质。我们把 p 与 x-p 结成一对),且一对和为x;如(x=14),y有(1,3,5,9,11,13),每组和都(=x)。于是我们可以用欧拉函数求出x的y有多少个,就可以求出难挖指数是多少,一个x时间复杂度为(O(log n)),常数级别,那么整个的时间复杂度为(O(t sqrt{n})),完全可以过,注意有特殊情况:x=1,x=2。

    #include<cstdio>
    int t,n;
    long long ans;
    inline int euler(int x){
    	int ans=x;
    	for(int i=2;i*i<=x;i++){
    		if(x%i==0) ans-=ans/i;
    		while(x%i==0) x/=i;
    	}
    	if(x>1) ans-=ans/x;
    	return ans;
    }
    inline long long func(int x){
    	if(x==1||x==2){
    		return 1;
    	}else{
    		int g=euler(x);
    		return (long long)g*x/2;
    	}
    }
    int main(){
    	scanf("%d",&t);
    	for(int l=0;l<t;l++){
    		scanf("%d",&n);
    		ans=0;
    		for(int i=1;i*i<=n;i++)
    			if(n%i==0){
    				ans+=func(i);
    				if(n/i!=i) ans+=func(n/i);
    			}
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    HAIP异常,导致RAC节点无法启动的解决方案
    ORA-00600: internal error code, arguments: [kcbo_unlink_q_3], [0x3710B87B0]
    impdp导入报错之ORA-39126
    ORA-27102: out of memory (2019-11-29 18:30)
    ORA-00371: not enough shared pool memory
    Warning: VKTM detected a time drift.
    Cable master (POJ No.1064)
    二分查找
    结构体和类的operator<
    mybatis(基于annotation的方法知道就行了)
  • 原文地址:https://www.cnblogs.com/cjz-IT/p/contest20200201.html
Copyright © 2011-2022 走看看