题解:P10358 [PA2024] Obrazy
P10358 [PA2024] Obrazy
题目传送门
题意分析:
1.特判
我们很容易能够想到本题的特殊判断:即当最小的画框都不可能覆盖整个矩形墙面时,输出
2.常规
若我们将墙面的长设为
当
我们可用一个变量
tmp=(l-(l%a[i]))*(r-(r%a[i]));
ans-=tmp/a1[i-1];//较小画框可换数量
ans+=tmp/a1[i];//较大画框可换数量
代码:
//#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
inline long long read(){//快读
long long x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-'){
f=-1;
}
c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<1)+(x<<3)+(c^'0');
c=getchar();
}
return x*f;
}
void write(int x){//快写(虽然不经常用)
if(x<0){
putchar('-');
x=-x;
}
if(x>9){
write(x/10);
}
putchar(x%10+'0');
return;
}
long long a[1145141],f[1145141],n,m,l,r,a1[1145141];
int main(){
l=read();r=read();
m=l*r;//计算总面积
n=read();
long long ans=0;
for(int i=1;i<=n;i++){
a[i]=read();
a1[i]=a[i]*a[i];
if(i==1){//特判:最小画框有无可能全部覆盖
ans=(l-(l%a[i]))*(r-(r%a[i]));
ans=ans/a1[i];
if(ans*a1[i]<m){
cout<<-1;
exit(0);//=return 0;
}
}else{
long long tmp=(l-(l%a[i]))*(r-(r%a[i]));//tmp表示当前画框可覆盖面积
ans-=tmp/a1[i-1];//较小画框可换数量
ans+=tmp/a1[i];//较大画框可换数量
}
}
cout<<ans;
return 0;
}