[BZOJ1853] [스코이2010] 행운의 숫자(용척원리)
제목 설명
전송문
문제풀이
BZOJ2393과 기본적으로 마찬가지로 데이터 범위가 넓습니다. b 정렬을 최대한 큰 것으로 골라서 가지를 잘라야 합니다.
코드
#include
#include
#include
#include
#include
using namespace std;
#define LL long long
LL l,r,ans;
LL a[3005],b[3005];
void get(LL x)
{
if (x>r) return;
a[++a[0]]=x;
get(x*10+6);
get(x*10+8);
}
LL gcd(LL a,LL b)
{
if (!b) return a;
else return gcd(b,a%b);
}
void dfs(int x,int y,LL lcm)
{
if (x==b[0]+1)
{
if (y&1) ans+=r/lcm-(l-1)/lcm;
else if (y) ans-=r/lcm-(l-1)/lcm;
return;
}
dfs(x+1,y,lcm);
LL t=gcd(lcm,b[x]);
lcm/=t;
if (r/lcmreturn;
lcm*=b[x];
dfs(x+1,y+1,lcm);
}
int main()
{
scanf("%lld%lld",&l,&r);get(0);
sort(a+1,a+a[0]+1);
for (int i=1;i<=a[0];++i)
if (a[i])
{
b[++b[0]]=a[i];
for (int j=i+1;j<=a[0];++j)
if (a[j]%a[i]==0) a[j]=0;
}
for (int i=1;i<=b[0]/2;++i) swap(b[i],b[b[0]-i+1]);
dfs(1,0,1);
printf("%lld
",ans);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
49일차 - 2022.04.20Baekjoon에서 문제풀이 1) 문제 : 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제/ 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 첫째 줄부터 N번째 줄까지 차례대로 별...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.