列表

详情


NC200318. Sweet

描述

幼稚园有n个小幼稚,编号1~n由左至右,站成一排。幼稚长从左向右发糖果,每a个小幼稚获得一个糖果(a号是第一个得到糖果的),从右往左发饼干,每b个小幼稚获得一个饼干((n-b+1)号是第一个得到饼干的)。 幼稚长想要知道有多少小幼稚既获得了糖果又获得了饼干。


输入描述

输入三个正整数n, a, b。

数据规范:
*
* .

输出描述

输出一个整数,表示有多少小幼稚既获得了糖果又获得了饼干。

示例1

输入:

7 3 4

输出:

0

说明:

7个小幼稚 从左往右每3个小幼稚发糖果,从右往左每4个小幼稚发饼干
1 2 3 4 5 6 7
发糖果 3 6
发饼干 4

示例2

输入:

8 3 2

输出:

1

说明:

8个小幼稚 从左往右每3个小幼稚发糖果,从右往左每2个小幼稚发饼干
1 2 3 4 5 6 7 8
发糖果 3 6
发饼干 7 5 3 1
3号小幼稚既获得糖果,又获得糖果

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 508K, 提交时间: 2020-06-15 14:01:53

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	ll n,a,b;
	scanf("%lld %lld %lld",&n,&a,&b);
	ll i;
	for(i=n%b+1;i<=n;i+=b){
		if(i%a==0)break;
	}
	ll ans=(n-i)/((a*b)/__gcd(a,b))+1;
	if(i>n){
		printf("0\n");
	}else{
		printf("%lld\n",ans);
	}
	return 0;
} 

C++(clang++ 11.0.1) 解法, 执行用时: 4ms, 内存消耗: 452K, 提交时间: 2022-12-18 17:00:06

#include<bits/stdc++.h>

using namespace std;

int main()
{
	long long n,a,b,i,m,cnt;
	cin>>n>>a>>b;
	for(i=n%b+1;i<=n;i+=b){
		if(i%a==0){
			break;
		}
	}
	if(i>n){
		cnt=0;
	}else{
		m=(a*b)/(__gcd(a,b));
		cnt=(n-i)/m+1;
	}
	cout<<cnt;
}

上一题