| ||||||||||
| 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 | |||||||||
Re:O(sqrt(y))的复杂度TLE,O(log(y)*log(y))复杂度ACIn Reply To:O(sqrt(y))的复杂度TLE,O(log(y)*log(y))复杂度AC Posted by:tasty at 2013-04-28 23:20:26 > RT
代码:
Source Code
Problem: 3495 User: tasty
Memory: 164K Time: 32MS
Language: C++ Result: Accepted
Source Code
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <string.h>
using namespace std;
long long x,y,z,ans;
long long fun(long long x,long long a,long long b,long long n)
{
long long res=0,k=(a/b)&1;
if(n<0)
return 0;
a=a%b;
if(n&1)
res=(((n+1)/2)&1);
else
res=((n/2)&1);
res=(res*k)&1;
if(a==0)
{
res+=((x/b)&1)*((n+1)&1);
res&=1;
return res;
}
res+=((x/b)&1)+(n&1)*(((x+n*a)/b)&1)+fun(b-x%b-1,b,a,(x+n*a)/b-x/b-1);
return res&1;
}
int main()
{
int i,j,s,p,q;
long long k;
while(scanf("%lld%lld%lld",&x,&y,&z)==3)
{
ans=0;
k=(y-x)/z;
for(i=0;((long long)1<<(long long)i)<=y;i++)
ans+=fun(x,z,(long long)1<<(long long)i,k)*((long long)1<<(long long)i);
printf("%lld\n",ans);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator