2018普及组初赛解析(chasem)

2018普及组初赛

题目链接:https://ti.luogu.com.cn/problemset/1028

​ 当N为偶数时,先取前两个数字,比较之后,大的为max,小的为min。

​ 后面的数字两两一组,组内比较之后,大的和max比较,小的和min比较。

​ 当N为奇数时,max和min都取第一个数字,后面的数字两两一组,组内比较之后,

​ 大的和max比较,小的和min比较。

偶数需要比较的次数为:1+(N-2)/23=3/2N-2

奇数需要比较的次数为(N-1)/2*3.


​ 验证后 可得答案是A

​ n个节点的边数范围:(n-1)-- (n*(n-1)/2)

​ 所以边数可为:3 4 5 6 其中3 4有异构,所以有6种结构。

n 个 元 素 构 成 元 素 的 子 集 数 为 : 2 n n个元素构成元素的子集数为:2^n n:2n
这个可以这样理解:构造集合时,对于每个元素,都可以选或者不选, 分步完成。

10个元素选7个和选3个方案数是一样的。 10 * 9 * 8 / 3!=120.

答案为:120 / 1024= 15 / 128

10000 = 2 4 ∗ 5 4 10000 = 2^4*5^4 10000=2454
​ 和10000公约数为2的数字个数:10000 / 2 = 5000

​ 和10000公约数为5的数字个数:10000 / 5 = 2000

​ 和10000公约数为10的数字个数:10000 / 10 = 1000

​ 其中第三个集合为前两个集合的交集,所以和10000互质的数字个数为:

​ 10000 - (5000+2000-1000)= 4000

  1. ​ 代入即可

  2. ​ 由题意得,丙去一定丁没去,接下来再做假设即可。

    ​ 假设下雨的话,乙去或者不去都会有矛盾。

    ​ 所以可得没下雨,在假设没下雨乙去,也有矛盾,所以没下雨且乙没去。

    ​ 若此时假设甲不去,也有矛盾,所以甲去了。

  3. ​ 先算1-2000范围内的 :

    ​ 只有一位有8的:9 * 9 * 2 * 3

    ​ 有两位有8的:9 * 2 * 3

    ​ 有三位有8的: 2

    ​ 2000-2018范围含8的:2

    计算得:544

  4. 题意为统计 %15==1的完全平方数 逐一验证即可

  5. 递推即可。
    f ( i , j ) = f ( i − 1 , j ) − f ( i , j − 1 ) + f ( i − 1 , j − 1 ) f(i,j) = f(i-1,j) - f(i,j-1) + f(i-1,j-1) f(i,j)=f(i1,j)f(i,j1)+f(i1,j1)
    可以把 f(i,j) 理解成第 i 行 第 j 列的值。

    第 i 行 第 j 列的值和左上角,左,上的值有关。

    根据关系式推导就可以得到结果。

    推导过程如下:

    0 1 2 3 4 5 6
    1 0 3 2 5 4 7
    2 -1 4 1 6 3 8
    0 1 2 3 4 5 6
    1 0 3 2 5 4 7
    2 -1 4 1 6 3 8

    可以将推导过程转换成如下代码:

    //2018 初赛 20
    #include<iostream>
    using namespace std;
    int f[10][10]; 
    int main()
    {
    	for(int i=0;i<=5;i++)
    	{
    		for(int j=0;j<=6;j++)
    		{
    			if(i==0)f[i][j]=j;
    			else if(j==0)f[i][j]=i%3;
    			else
    				f[i][j]=f[i-1][j]-f[i][j-1]+f[i-1][j-1];
    			cout<<f[i][j]<<" ";
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    
  6. 代入即可

  7. 第一空:和判断质数的思路类似,所有约数在除数为1-sqrt(n)的时会在除数和商的位置都出现。

    第二空:除数和商都是约数,都要进数组,但是要避免重复。

    第三空:规定:任何数和0的最大公约数都是本身。

    第四空:欧几里得求最大公约数法:

    int gcd(int a, int b) {
        if (b == 0)  return a;
        else  return gcd(a, a %b);
    }
    

    相关知识:

    最小公倍数的求解:当得到 a 和 b 的最大公约数 z 后,可以得到 a 和 b 的最小公倍数是 (a * b / z),由于 ab 在实际计算中有可能溢出,因此更恰当的写法是 (a / z * b)

    第五空:类似照相问题,每个人都和身后的人照照片。

    ​ 每个数字都和后面数字求最大公约数。求出来的结果,加到结果变量上。

1.a[x]=i 	记录元素的位置
2. i+1	右指针当然指右边
3. R[a[i]]   删除操作 和下面的操作对称
4. a[i]  删除操作 和上面的操作对称
5. R[i]  输出结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值