BZOJ 3834 Solar Panels

Link

自己又鼓捣出一个没有卵用的结论

Solution

正解: 枚举nn判断是否合法,只需要看[lx,rx][lx,rx][ly,ry][ly,ry]中是否都存在nn的倍数 只需要看(l1n,rn](\dfrac {l-1}n,\dfrac rn]是不是空区间即可 一开始不明白为什么不能看[ln,rn][\dfrac ln,\dfrac rn],发现l=11,r=15,n=10l=11,r=15,n=10就是反例

自己的没用结论 看[l,r][l,r]中有无nn的倍数,需要满足 然后就没办法了

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "lucida"

using std::min;
using std::max;
void Work() {
int lx,rx,ly,ry;
is>>lx>>rx>>ly>>ry;
int Ans=0;
for(int lbd=1,rbd,endl=min(rx,ry);lbd<=endl;lbd=rbd+1) {
rbd=min(rx/(rx/lbd),ry/(ry/lbd));
if(lbd<=lx-1) chkmn(rbd,(lx-1)/((lx-1)/lbd));
if(lbd<=ly-1) chkmn(rbd,(ly-1)/((ly-1)/lbd));
if((lx-1)/lbd<rx/lbd && (ly-1)/lbd<ry/lbd)
Ans=rbd;
}
os<<Ans<<'\n';
}
/*
void Vio() {
int lx,rx,ly,ry,Ans=0;
is>>lx>>rx>>ly>>ry;
for(int i=1,endi=min(rx,ry);i<=endi;++i)
if(((i-lx%i)%i)<=rx-lx && ((i-ly%i)%i)<=ry-ly)
Ans=i;
os<<Ans<<'\n';
}*/
int main() {
// freopen("input","r",stdin);
int T;is>>T;
while(T--)
//Vio();
Work();
return 0;
}