Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
百思不得其解~为什么longlong就TLE,改成__int64就能过呢? 附代码#include <iostream> #include <cmath> #define ll long long using namespace std; const ll w=100000; int main() { int tc; scanf("%d",&tc); while(tc--) { ll n,m; scanf("%lld%lld",&n,&m); ll max=w*w*10; ll min=-max; while(min<max) { ll x = (min+max)/2; if(x==max) x--; ll sum = 0; for(ll j = 1; j <= n && sum<=m; ++j) { ll det = (w+j)*(w+j) - 4*(j*j-w*j-x); if(det>=0) { ll q = int(sqrt(det)); if((q+1)*(q+1) <= det) q++; ll x0 = (-(w+j)-q)/2; ll x1 = (-(w+j)+q)/2; if(x0<1) x0=1; if(x1>n) x1=n; if(x0<=x1) sum+=(x1-x0+1); } } if(sum<m) min=x+1; else max=x; } printf("%lld\n",min); } return 0; } 以下是int64 #include <iostream> #include <cmath> #define ll __int64 using namespace std; const ll w=100000; int main() { int tc; scanf("%d",&tc); while(tc--) { ll n,m; scanf("%I64d%I64d",&n,&m); ll max=w*w*10; ll min=-max; while(min<max) { ll x = (min+max)/2; if(x==max) x--; ll sum = 0; for(ll j = 1; j <= n && sum<=m; ++j) { ll det = (w+j)*(w+j) - 4*(j*j-w*j-x); if(det>=0) { ll q = int(sqrt(det)); if((q+1)*(q+1) <= det) q++; ll x0 = (-(w+j)-q)/2; ll x1 = (-(w+j)+q)/2; if(x0<1) x0=1; if(x1>n) x1=n; if(x0<=x1) sum+=(x1-x0+1); } } if(sum<m) min=x+1; else max=x; } printf("%I64d\n",min); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator