ACM新手周赛 4

题解

B - 高斯消元模板

题目:求A^B mod C.

于是又用了欧拉降幂。。。看这里

C - LCA(补题)

题目:给你一颗树,每条边有边权。
求将三个连接起来的最小代价。

  • LCA + 思维
  • 相对于DAY24的A题,这里所求的是(fs(u, v)+fs(v, w)+fs(w, u))/2(fs函数得到的是两点间的最短路径),之所以相加除以2,是因为每个点到公共最近祖先的路径被加了两次。

D - 二元组

题目:输入一个N值,判断有多少个二元组(x, y)满足1 <= x, y <= N, 且x, y互质。
提示:N=2时,有三个二元组,(1,1) , (1,2) , (2,1).

  • 求多个欧拉函数
  • 模板稍微修改一下就好
  • 代码
#include <iostream>
#include <string.h>
using namespace std;
const int mx = 50010;
int a[mx];
int main()
{
    memset(a, 0, sizeof a);
    for(int i=2; i<= mx; i++)
    {
        if(a[i] == 0)
        {
            for(int j=i; j<=mx; j+=i)
            {
                if(a[j]==0)
                    a[j] = j;
                a[j] = a[j] / i * (i-1);
            }
        }
    }
    int n;
    while(cin >> n && n)
    {
        long long sum(0);
        for(int i=1; i<=n; i++){
            sum += a[i];}
        cout << sum * 2 + 1<< endl;
    }
    return 0;
}

E - 皮皮的项链

直接看这个吧(B题)

发布了47 篇原创文章 · 获赞 4 · 访问量 1294

猜你喜欢

转载自blog.csdn.net/listenhhh/article/details/99114896