标签:
4 0 5 0 5 3 0 0 999999 0 999999 1000000 0 0 3 0 3 8 7 3 3 4 4 7 0
Case #1: 1/3 Case #2: 1/1000000 Case #3: 0/1 Case #4: 1/1
#include<stdio.h> #include<algorithm> using namespace std; __int64 m,p; __int64 GCD(__int64 a,__int64 b){ return !b?a:GCD(b,a%b); } __int64 f(__int64 a,__int64 b){ __int64 ta,tb,ra,rb; if(a<0||b<0) return 0; ta=(a+1)/p; tb=(b+1)/p; ra=(a+1) %p; rb=(b+1)%p; __int64 ans=0; ans= p * ta * tb; if(!ra&&!rb) return ans; if(ra) ans+=ra*tb; if(rb) ans+=rb*ta; if(!ra||!rb) return ans; ra--;rb--; __int64 miny=(m-ra+p)%p; if(ra>m) { ans+=min(m+1,rb+1); if(miny<=rb) ans+=rb-miny+1; } else if(ra<m){ if(miny<=rb) ans+=min(ra+1,rb-miny+1); } else if(ra==m) ans+=min(ra+1,rb+1); return ans; } int main(){ int t,cas=0;; scanf("%d",&t); while(t--){ ++cas; __int64 a,b,c,d; scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&a,&b,&c,&d,&p,&m); __int64 u=f(b,d)-f(b,c-1)-f(a-1,d)+f(a-1,c-1); __int64 v=(b-a+1)*(d-c+1); __int64 s=GCD(u,v); printf("Case #%d: %I64d/%I64d\n",cas,u/s,v/s);; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qq_18062811/article/details/47154895