实小社团练习赛13


本文总阅读量

8001,8508,8002,2904

T1

快排
pair或者struct结构体,记录顺序和编号
然后按顺序从小到大排序,输出编号即可。

T2

计数
数的范围在10万以内,所以可以用计数来做。
大致思路如下:
1.对输入的每个数进行计数,并计算总和sum
2.当值Bi的每个数替换成Ci,首先值为Ci的个数为值Bi的个数和值Ci的个数之和。然后更新总和,即:
A[Ci]=A[Ci]+A[Bi]
sum=sumA[Bi]Bi+A[Bi]Ci
A[Bi]=0
注意题目的提示,总和可能会超过int,所以要用long long。

T3

数论:最大公因数+分解质因数
A和B的最大公因数的因数必然也是A和B的公因数
两个质数肯定是互质数,所以对最大公因数进行质因数分解,能保证任意两个公因数都是互质数。
所以解题思路如下:
1.先求出最大公因数。
2.对最大公因数进行质因数分解,统计有多少个不同的质因数,请用加强版分解质因数。
3.输出结果不要忘记加1,因为1与任何数能组成互质数。

T4

方法1:DFS+计数
根据题意,用两个二维数组记录通过田地的时间(邻接矩阵)。

for(int i = 0; i < m; i++){
        int x,y,c,d;
        cin >> x >> y >> c >> d;
        bGrid[x][y] = c; //贝里斯
        aGrid[x][y] = d; //爱丽丝
    }

然后对每张地图进行深搜即可,到达第N块田地时,用计数数组记录一下(不同奶牛应用不同的计数数组),最后枚举计数数组,同一时刻都被记录的即为答案。
方法2:深搜思路(需两个深搜)

void dfs(当前田地编号,当前时间)
{
   if(当前田地编号==n){
        计数;
        return;
   }
   for ... 枚举跟田地编号连接的田地{ //因为题目保证A<B,可以用组合方式枚举
           if(田地连接){
                dfs(下一块田地,当前时间+访问下一块田地的时间)
           }
    }
}

本站总访问量