比赛 |
20110923 |
评测结果 |
AWWEEEEEEE |
题目名称 |
横幅 |
最终得分 |
10 |
用户昵称 |
Citron酱 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-09-23 21:29:49 |
显示代码纯文本
#include <fstream>
#include <cmath>
#define I_F "banner.in"
#define O_F "banner.out"
const int MAXn=1000;
int primes[MAXn];
int pn;
int w,h,l1,l2;
long long ans;
void Getprimes();
void Input();
inline bool Hz(const int, const int);
inline bool Len(const int, const int, const int, const int);
long long K(const int);
void Search();
void Output();
int main()
{
Getprimes();
Input();
Search();
Output();
return 0;
}
void Getprimes()
{
pn=1;
primes[0]=2;
bool flag;
for (int i=3; i<MAXn; i+=2)
{
flag=true;
for (int j=0; (flag)&&(j<pn)&&(primes[j]<=sqrt(i)); j++)
if (i%primes[j]==0)
flag=false;
if (flag)
primes[pn++]=i;
}
}
void Input()
{
std::ifstream fin(I_F);
fin>>w>>h>>l1>>l2;
fin.close();
if (w<h)
{
w+=h;
h=w-h;
w-=h;
}
}
inline bool Hz(const int a, const int b)
{
if (a==0)
if (b==1)
return true;
else
return false;
int m=(a<b)?a:b;
for (int i=0; (i<pn)&&(primes[i]<=sqrt(m)); i++)
if (a%i==b%i)
return false;
return true;
}
inline bool Len(const int x1, const int y1, const int x2, const int y2)
{
float t=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return (t>=l1)&&(t<=l2);
}
long long K(const int m)
{
long long t=0;
for (int i=0; i<h/2; i++)
for (int j=0; j<h; j++)
if (Hz(i-j,m) && Len(0,i,m,j))
t++;
t*=2;
if (h%2>0)
for (int j=0; j<h; j++)
if (Hz(h/2-j,m) && Len(0,h/2,m,j))
t++;
return t;
}
void Search()
{
ans=0;
h++;
for (int i=1; i<=w; i++)
ans=ans*2+K(i);
if (l1<=1)
ans+=(h-1)*(w+1);
}
void Output()
{
std::ofstream fout(O_F);
fout<<ans<<std::endl;
fout.close();
}