牛客周赛30

思路:先把x, y除以最大公约数变成最小值,然后同时乘以倍数cnt,只记录两个数都在[l,r]间的倍数。

代码:

int gcd(int a,int b){
	return b ? gcd(b, a % b) : a;
}

void solve(){
	int x, y, l, r;
	cin >> x >> y >> l >> r;
	int g = gcd(x, y);
	x /= g,y /= g;
	int ans = 0, cnt = 1;
    while(x * cnt < l || y * cnt < l)
        cnt ++;
	while(x * cnt <= r && y * cnt <= r)
		ans ++, cnt++;
	cout << ans << endl;
}

思路:从下往上dfs,树形dp;

代码:

int n;
vector<int>e[200010];
int f[200010][2];//0 1分别代表红,不染红

void dfs(int u,int fa){
	int m1 = 1, m2 = 1;
	for(auto v:e[u]){
		if(v == fa)continue;
		dfs(v, u);
		m1 = (m1 * (f[v][0])) % mod;      //u节点不染红的话,就需要每个子节点都染红
		m2 = (m2 * (f[v][0] + f[v][1]))%mod;  //u节点染红的话,子节点染不染红都可以
	}
	f[u][0] = m2;        //u节点染红的方案数
	f[u][1] = m1;        //u节点不染红的方案数
}

void solve(){
	cin >> n;
	for(int i = 1;i < n;i ++){
		int u, v;
		cin >> u >> v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	dfs(1, 0);
	cout <<(f[1][0] + f[1][1])%mod;      //输出根节点的总方案数
}

相关推荐

  1. 39

    2024-01-29 10:36:01       34 阅读
  2. Round 30(A~E)

    2024-01-29 10:36:01       48 阅读
  3. 26

    2024-01-29 10:36:01       55 阅读
  4. 45

    2024-01-29 10:36:01       28 阅读
  5. 51

    2024-01-29 10:36:01       27 阅读
  6. Round31-小白感悟

    2024-01-29 10:36:01       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-29 10:36:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-29 10:36:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-29 10:36:01       82 阅读
  4. Python语言-面向对象

    2024-01-29 10:36:01       91 阅读

热门阅读

  1. Leetcode 3021. Alice and Bob Playing Flower Game

    2024-01-29 10:36:01       61 阅读
  2. 记录 | ubuntu查看系统信息如系统版本、cpu信息

    2024-01-29 10:36:01       60 阅读
  3. ubuntu 添加 sudo 权限

    2024-01-29 10:36:01       58 阅读
  4. Matlab自学笔记二十六:sprintf函数用法简介

    2024-01-29 10:36:01       65 阅读
  5. pytorch交换数组元素坑

    2024-01-29 10:36:01       63 阅读
  6. “语法糖“

    2024-01-29 10:36:01       48 阅读