2 条题解
- 
  1
#include<iostream> #include<cstdio> #define int long long using namespace std; int n,m,len,a,b,vis[1000001],t,ans; void find(int x){ for(int i=1;i*i<=x;i++){ if(x%i==0){ vis[++len]=i; if(i*i!=x)vis[++len]=x/i; } } } bool check(int x){ if((b-a)/x+1>n)return false; if((a-1)/x+(b-a)/x+1+(m-b)/x>=n)return true; return false; } signed main(){ scanf("%lld",&t); for(int i=1;i<=t;i++){ scanf("%lld%lld%lld%lld",&n,&m,&a,&b); if(a>b)swap(a,b); ans=len=0; find(b-a); for(int j=1;j<=len;j++)if(check(vis[j]))ans++; printf("%lld\n",ans); } } /* n=4,m=16,a=2,b=8; ***~~~a~~~~~~~~~~~b~~~~~~~~~~~~~~~m *** - 2 - - - - - 8 - - - - - - - 16 ***|-|-----------|-|---------------| *** | | | | *** | | | | ***\|/ | \|/ | ***(a-1)/x \|/ 1 \|/ *** (b-a)/x (m-b)/x */ 
信息
- ID
 - 2950
 - 时间
 - 1000ms
 - 内存
 - 256MiB
 - 难度
 - 9
 - 标签
 - 递交数
 - 488
 - 已通过
 - 28
 - 上传者