专栏文章

P9213 [入门赛 #11] 移植柳树 (Hard Version) 题解

P9213题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minugc1j
此快照首次捕获于
2025/12/02 08:32
3 个月前
此快照最后确认于
2025/12/02 08:32
3 个月前
查看原文

P9213 [入门赛 #11] 移植柳树 (Hard Version) 题解

1.1.分析题目
题目说有nn棵柳树,每两棵之间间隔xx米。求把每两棵之间间隔yy米,最少不用挪动多少棵柳树。
2.2.分析解题思路
观察题图 我们发现题目中不用动的柳树每隔66米出现一个,而66又等于2233的最小公倍数。
关于最小公倍数,从C++17开始就有自带的函数:lcm(x,y)
66米一个相当于6÷3=26÷3=2棵柳树一个,那么有几个22棵柳树?
只需要用总棵树÷2÷2行啦!
3.3.代码实现\
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ull unsigned ll
#define me(a,x) memset(a,x,sizeof(a))
#define f(i,a,b,c) for(int i=a;i<=b;i+=c
#define rf(i,a,b,c) for(int i=a;i<b;i+=c)
#define F(i,a,b,c) for(int i=a;i>=b;i-=c)
#define RF(i,a,b,c) for(int i=a;i>b;i-=c)
const int maxn=1<<17;//131072,<<20 1048576,
#define vi vector<int>
#define sf scanf
#define pf printf
//上面为个人习惯,不用管
int t;
signed main(){
    sf("%lld",&t);//输入组数
    while(t--){//循环组数
        int n,x,y;
        sf("%lld%lld%lld",&n,&x,&y);//输入变量
        pf("%lld\n",n/(lcm(x,y)/x)+1);//输出答案
    }
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...